看板 MacDev 關於我們 聯絡資訊
我的界面是用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 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.218.72
whitefur:keyWindow.rootViewController = tabbarController 02/20 10:08
whitefur:主功能不要用present的了, 因為你不是隨時都會回登入畫面 02/20 10:10
whitefur:直接把整個rootViewController換掉 02/20 10:11
y03131003:root改成tabbar 然後在tabbar判斷要不要present登入畫 02/20 12:20
y03131003:面嗎? 02/20 12:20
howdiun:TabBarViewController新增storyboard ID,直接呼叫他 02/20 15:02
whitefur:一開始的rootVC一樣是登入, 不需要登入畫面的話就把 02/21 10:33
whitefur:rootVC換成tabbarController 02/21 10:34
whitefur:if(已登入) rootViewController = tabbarController; 02/21 10:34
y03131003:感謝,修改rootViewController成功了! 02/21 17:04
benck:我覺得你這樣好複雜... 02/22 09:50
benck:我的做法是,用storyboard直接就拉一個tab view controller 02/22 09:51
benck:設成root 02/22 09:51
benck:然後在第一個tab的viewdidload裡面判斷 02/22 09:51
benck:如果未登入的話,就present 你的登入modal view 02/22 09:51
benck:login的vc也可以在storyboard拉,就更簡單了,直接 02/22 09:53
benck:performsegue 02/22 09:53
y03131003:viewDidLoad裡面好像不能執行present的動作 02/23 18:14
y03131003:會有whose view is not in the window hierarchy!的錯誤 02/23 18:14