我在xcode中使用storyBoards,並且我製作了一個alertView,它將作爲免責聲明。當按下所選按鈕(是/否)時,我想切換並保存rootViewController。通過這個我的意思是,當按下時,我希望下次啓動應用程序時使用不同的rootViewController啓動。但是,如果使用故事板時,我怎麼能做到這一點,rootViewController由MainStoryBoard中的箭頭指定?提前謝謝如何以編程方式更改使用Storyboard的rootViewController?
回答
我這樣做的方式是在RootViewController viewDidLoad方法中檢查一個類似的條件。
您可以檢查用戶是否已經接受條款等等......如果他們有那麼(這些信息存儲在NSUserDefaults的或東西)
的RootViewController的的viewDidLoad中內部執行SEGUE到的viewController你想利用他們到應用程序啓動時。
這個segue會在任何東西進入屏幕之前發生,所以用戶會認爲應用程序直接進入了新屏幕。
另外,現在你popToRootViewController方法會帶你到錯誤的屏幕。所以看看放鬆行動。這是一種方法,您可以返回到堆棧中任何位置的viewController,而無需執行多個彈出窗口。
如果你需要,我可以找到一個關於放鬆行動更多信息的鏈接。
一般而言,您不能在故事板中重新使用視圖或視圖控制器。它們是靜態表示,它們連接到awakeFromNIB中的代碼。
即使您想將不同的視圖控制器連接到故事板中的視圖,您也不能。我會假設它也無法更改故事板中的rootViewController出於同樣的原因。
故事板是一個很好的抽象概念,然而,它們下面是一個普通的老筆尖,如果你想靈活地將任何VC編碼到任何視圖,並替換你的rootViewController,你將需要創建另一個包含這些視圖的筆尖,作爲故事板不會讓你在飛行中重新配置它。
您可以設置一個cookie(例如使用NSUserDefaults),告訴您需要從不同的視圖控制器啓動。然後,在你的應用程序代理,你可以檢查這個cookie值,並改變你的故事板的初始視圖控制器一樣,
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Register User Defaults Values
[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"tutorial_already_displayed":@NO}];
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"tutorial_already_displayed"] == NO)
{
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
UIViewController* rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"Tutorial"];
self.window.rootViewController = rootViewController;
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"tutorial_already_displayed"];
}
return YES;
}
如果RootViewController的未更改,在故事板的一組將是最初的一個。
因此,在你點擊你的按鈕的動作,你可以添加:
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"tutorial_already_displayed"];
所以這本手冊將顯示爲第一個視圖控制器
希望它幫助!祝你好運。
PS:我知道這個問題已經被問了很久以前,但因爲沒有可以接受的答案,這不是太晚尋找這個答案;-)
- 1. 以編程方式更改storyBoard的rootViewController
- 2. 如何以編程方式更改/替換模板中的StoryBoard?
- 3. 以編程方式覆蓋loadView並設置rootViewController,沒有Storyboard
- 4. 在Swift中以編程方式更改Storyboard的類
- 5. 如何以編程方式更改card_view:cardCornerRadius
- 6. 如何以編程方式更改android:configChanges?
- 7. 如何以編程方式更改UIView?
- 8. 通過編程方式更改Storyboard上的UIView的大小
- 9. 如何以編程方式繼承存儲在Storyboard中的UIViewController?
- 10. 以編程方式更改標籤方向,編程方式
- 11. 如何以編程方式更改默認應用程序?
- 12. mgwt - 以編程方式更改方向
- 13. 更改R.String的值以編程方式
- 14. 以編程方式更改kendomultiselect的tagMode
- 15. 以編程方式更改SCNScene的sceneNamed
- 16. 以編程方式更改R.string的值?
- 17. 如何更改navigationController的rootViewController
- 18. 如何更改NavigationController的rootviewcontroller?
- 19. 以編程方式創建UITableViewController時使用Storyboard
- 20. 如何以編程方式更改的方法
- 21. 以Storyboard的形式呈現PresentModalViewController以編程方式iOS 5
- 22. 如何以編程方式更改ImageButton的樣式
- 23. 如何以編程方式更改ADF表格中的樣式
- 24. 如何以編程方式更改div的樣式
- 25. 如何以編程方式更改預定義的Drools流程?
- 26. 如何以編程方式檢索UIScrollView? (iOS 5 Storyboard)
- 27. 如何使用以編程方式更改的Ember.TextBox數據更新存儲?
- 28. 編程方式更改使用C
- 29. 我可以使用setProgress以編程方式更改搜索欄:
- 30. 以編程方式使用按鈕更改屏幕方向
正確的,你不能改變的下一個開發者rootViewController,但是您可以通過在viewDidLoad中執行segue來讓應用打開到第二個viewController。我就是這樣做的。 – Fogmeister