现在我有MainViewController
嵌入UINavigationController
,因此导航控制器被设置为初始视图控制器。
我想要的是第一次启动应用,然后才显示StartupViewController
。但我不知道如何在我的故事板中代表这一点。
如果应用程序第一次启动,是否应将其设置为初始视图控制器,否则应设置导航控制器。
我尝试的是在StartupViewController
中展示MainViewController::viewDidLoad()
,但它不是我想要的。
任何人都知道这样做的正确方法是什么?
答案 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)
}