2016-12-28 2 views
1

Прямо сейчас у меня есть MainViewController, который встроен в UINavigationController, поэтому навигационный контроллер установлен в качестве начального контроллера.Как представить загрузочный экран в раскадровки

Что я хочу - это первый раз, когда приложение запускается, и только затем, чтобы показать StartupViewController. Но я не уверен, как представить это в своем раскадровке.

Если это необходимо установить в качестве контроллера начального представления, если приложение запускается в первый раз, если не нужно установить навигационный контроллер.

Что я пытался показать StartupViewController в MainViewController::viewDidLoad(), но его не работает, как я тоже хотел.

Кто-нибудь знает, как правильно подойти для этого?

+0

Почему бы вы использовали LaunchScreen.Storyboard для экрана запуска –

+0

Вы можете разместить код с вашего AppDelegate? Еще одна вещь, чтобы спросить, что в соответствии с вашим вопросом вы хотите, чтобы пользовательский экран загрузки правильно ... ?? – Tuhin

+0

Да, мне нужен экран, который говорит, если вы хотите загрузить данные из iCloud или просто запустите Fresh. И это должно отображаться только один раз, когда вы впервые запускаете приложение. – Kobe

ответ

1

Здравствуйте этот код может быть полезным для вас:

// MARK: - Application Supporting Funcations - 
func loadFirstViewController(viewController: String) 
{ 
    // for loading first view Controller 
    let storyBoard = appDelegate.AppStoryBoard() 
    /////////////////////////Add Navigation Controller and set Root View Controller/////////////////////////////////////// 
    let object = storyBoard.instantiateViewControllerWithIdentifier(viewController) // for prelogin navigation 
    self.navigationController = UINavigationController(rootViewController: object) 
    self.navigationController?.navigationBar.hidden = true 
    self.loadNavigationControllerToWindow() 
} 

func loadNavigationControllerToWindow() 
{ 
    if self.window == nil 
    { 
     self.window = UIWindow(frame: UIScreen.mainScreen().bounds) 
    } 
    // for loading root view 
    self.window!.rootViewController = self.navigationController! 
    self.window!.makeKeyAndVisible() 
} 

звоните по этой функции в сделалиFinishLaunchingWithOptions

if((NSUserDefaults.standardUserDefaults().valueForKey("isFirstTime") != nil)) 
     { 
      self.loadFirstViewController("LoginVC") // for loading first view controller 
     } 
     else 
     { 
      self.loadFirstViewController("WelcomeVC") // for loading first view controller 
     } 

поставить это после того, как вы идете во втором Controler viewDidLoad

if((NSUserDefaults.standardUserDefaults().valueForKey("isFirstTime") == nil)) 
    { 
     NSUserDefaults.standardUserDefaults().setValue("1", forKey: "isFirstTime") 
    } 
0

Пожалуйста, не забудьте указать идентификатор контроллера вида StartupViewController

-> взаимодействие пользователя позволяют в StartupViewController

if (UserDefaults.standard.string(forKey: "keepUsername") != nil) { 


     let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let vc = storyboard.instantiateViewController(withIdentifier: "Revealview") 
     self.present(vc, animated: false, completion: nil) 
    } 
    else 
    { 
     let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil) 

     let nextViewController = storyBoard.instantiateViewController(withIdentifier: "loginview") as! loginview 
     self.present(nextViewController, animated:true, completion:nil) 
    } 
+0

Я знаю, как его создать, я не знаю, как представлять VC только один раз, когда приложение запускается в первый раз. – Kobe

+0

означает, что вы хотите сказать только первый раз, когда отображается экран StartupViewController? – seggy

+0

обновленный ответ пожалуйста, проверьте .. – seggy

1

Это, как я дружнее в моем приложении. Добавьте это в appdelegate applicationdidfinishlaunching.

NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults]; 
if (![defaults boolForKey:@"FirstTime"]) 
{ 
    //NSLog(@"Enter First Time "); 
    UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]]; 
    StartupViewController * firstViewController = [storyBoard instantiateViewControllerWithIdentifier:@"StartupViewController"];//AskAndAnswerViewId RegisterViewId TagViewId HelpViewId 
    self.navigationController=[[UINavigationController alloc]initWithRootViewController:firstViewController]; 
    self.window.rootViewController = self.navigationController; 
    [self.navigationController setNavigationBarHidden:YES]; 
} 
else  
{ 
    //NSLog(@"not First Time"); 
    UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]]; 
    HelpViewController *mainviewcontroller = [storyBoard instantiateViewControllerWithIdentifier:@"AskAndAnswerViewId"]; 
    self.navigationController=[[UINavigationController alloc]initWithRootViewController:mainviewcontroller]; 
    self.window.rootViewController = self.navigationController; 
    [self.navigationController setNavigationBarHidden:YES]; 
} 

После того, как вы достигли в Mainviewcontroller изменить значение userdefault для FirstTime на "NO".

1

Я понимаю ваш вопрос,

В AppDelegate попытке установить RootViewController,

У меня есть сохранять данные в NSUserDefault, если пользователь пришел первый раз
И попытаться установить RootViewController когда он посетит первый раз.

В примере ниже я должен перемещаться пользователю Вход экран/домашний экран,

let str = userDefaults.objectForKey("firstTime") 
{}else{} 
Смежные вопросы