我有一个loginViewController作为我的rootviewcontroller,然后是主屏幕,然后是其他屏幕。我的观点遵循push和pop方法。我想要的是,如果用户已经登录我的视图应该从主屏幕开始,否则从登录屏幕开始,如果我从主屏幕注销它应该返回到登录屏幕并且应该保持推送和弹出结构。我可以使用模态转换实现这一点,但我需要使用push和pop方法,这可能吗?目前我已经在我的appdelegate中检查了已登录的条件以设置rootview控制器,但如果我尝试注销它在我的导航控制器堆栈中不存在则会失败。
if !alreadyLoggedin
{
let mainListVC = storyBoard.instantiateViewControllerWithIdentifier(“MainListViewController”)
self.window!.rootViewController = mainListVC
}
else
{
let loginVC = storyBoard.instantiateViewControllerWithIdentifier("ViewController")
self.window!.rootViewController = loginVC
}
答案 0 :(得分:1)
你需要使用。的AppDelegate
目标C
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
if (![[NSUserDefaults standardUserDefaults] boolForKey:@"LoginStatus"]) {
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
self.window.rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"loginController"];
}else{
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
self.window.rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"RootView"];
}
}
SWIFT - 我希望其正确
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
//Using UserDefaults check already loggedin user or not
if (!someStatus) {
let storyboard = UIStoryboard(name: "MyStoryboardName", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("someViewController") as! UIViewController
self.presentViewController(vc, animated: true, completion: nil)
}else{
let storyboard = UIStoryboard(name: "MyStoryboardName", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("loginViewController") as! UIViewController
self.presentViewController(vc, animated: true, completion: nil)
}
}
答案 1 :(得分:1)
这是基本用例,请按照我的步骤进行操作。
为您创建示例项目。下载链接(https://www.dropbox.com/s/zk8x7ptg5mzmotk/test.zip?dl=0)