如何在Storyboards中表示启动屏幕

时间:2016-12-28 11:42:06

标签: ios swift

现在我有MainViewController嵌入UINavigationController,因此导航控制器被设置为初始视图控制器。

我想要的是第一次启动应用,然后才显示StartupViewController。但我不知道如何在我的故事板中代表这一点。

如果应用程序第一次启动,是否应将其设置为初始视图控制器,否则应设置导航控制器。

我尝试的是在StartupViewController中展示MainViewController::viewDidLoad(),但它不是我想要的。

任何人都知道这样做的正确方法是什么?

4 个答案:

答案 0 :(得分: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()
}

didFinishLaunchingWithOptions

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

在你进入第二个控制器viewDidLoad

之后放这个
  if((NSUserDefaults.standardUserDefaults().valueForKey("isFirstTime") == nil))
    {
        NSUserDefaults.standardUserDefaults().setValue("1", forKey: "isFirstTime")
    }

答案 1 :(得分: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后,将FirstTime的userdefault值更改为" NO"。

答案 2 :(得分:1)

我理解你的问题,

AppDelegate尝试设置rootViewController,

如果用户第一次来,我在NSUserDefault存储数据 并在第一次访问时尝试设置rootViewController。

在下面的示例中,我将用户导航到登录屏幕/主屏幕

let str = userDefaults.objectForKey("firstTime")  
{}else{}

答案 3 :(得分: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)
     }