[問題] storyboard的initial view controller

作者: y03131003 (Jimmy)   2014-02-19 22:42:05
我的界面是用storyboard拉的
第一個頁面是登入頁面
登入完會進入一個TabBarViewController
我希望只要登入過後
下次開啟app的時候跳過登入頁面
直接進入TabBarViewController
所以我在登入頁面寫了以下程式
- (void)viewWillAppear:(BOOL)animated {
[super viewDidAppear:animated];
if (已登入)
{
UIStoryboard* sb = [UIStoryboard storyboardWithName:@"Main"
bundle:nil];
TabBarViewController *tabVC = [sb instantiateViewControllerWithIdentifier:
@"TabBar"];
[self presentViewController:tabVC animated:NO completion:nil];
}
}
這樣去跑會有錯誤
whose view is not in the window hierarchy!
原因是presentViewController一定要在viewDidAppear之後呼叫
所以我把程式碼移到viewDidAppear
不過這樣的話,登入頁面還是會出現一瞬間,才present我的TabBarViewController
請問要怎麼做才能讓登入頁面完全不要出現呢?
有想到一個做法是把登入頁面的所有元件先隱藏..沒有登入才顯示
但總覺得應該有更好的做法XD
作者: whitefur (白毛)   2014-02-20 10:08:00
keyWindow.rootViewController = tabbarController主功能不要用present的了, 因為你不是隨時都會回登入畫面直接把整個rootViewController換掉
作者: y03131003 (Jimmy)   2014-02-20 12:20:00
root改成tabbar 然後在tabbar判斷要不要present登入畫面嗎?
作者: howdiun (Howdiun)   2014-02-20 15:02:00
TabBarViewController新增storyboard ID,直接呼叫他
作者: whitefur (白毛)   2014-02-21 10:33:00
一開始的rootVC一樣是登入, 不需要登入畫面的話就把rootVC換成tabbarControllerif(已登入) rootViewController = tabbarController;
作者: y03131003 (Jimmy)   2014-02-21 17:04:00
感謝,修改rootViewController成功了!
作者: benck (小倫)   2014-02-22 09:50:00
我覺得你這樣好複雜...我的做法是,用storyboard直接就拉一個tab view controller設成root然後在第一個tab的viewdidload裡面判斷如果未登入的話,就present 你的登入modal viewlogin的vc也可以在storyboard拉,就更簡單了,直接performsegue
作者: y03131003 (Jimmy)   2014-02-23 18:14:00
viewDidLoad裡面好像不能執行present的動作會有whose view is not in the window hierarchy!的錯誤

Links booklink

Contact Us: admin [ a t ] ucptt.com