2012-09-24 38 views
1

我在xcode中使用storyBoards,並且我製作了一個alertView,它將作爲免責聲明。當按下所選按鈕(是/否)時,我想切換並保存rootViewController。通過這個我的意思是,當按下時,我希望下次啓動應用程序時使用不同的rootViewController啓動。但是,如果使用故事板時,我怎麼能做到這一點,rootViewController由MainStoryBoard中的箭頭指定?提前謝謝如何以編程方式更改使用Storyboard的rootViewController?

回答

1

我這樣做的方式是在RootViewController viewDidLoad方法中檢查一個類似的條件。

您可以檢查用戶是否已經接受條款等等......如果他們有那麼(這些信息存儲在NSUserDefaults的或東西)

的RootViewController的的viewDidLoad中內部執行SEGUE到的viewController你想利用他們到應用程序啓動時。

這個segue會在任何東西進入屏幕之前發生,所以用戶會認爲應用程序直接進入了新屏幕。

另外,現在你popToRootViewController方法會帶你到錯誤的屏幕。所以看看放鬆行動。這是一種方法,您可以返回到堆棧中任何位置的viewController,而無需執行多個彈出窗口。

如果你需要,我可以找到一個關於放鬆行動更多信息的鏈接。

1

一般而言,您不能在故事板中重新使用視圖或視圖控制器。它們是靜態表示,它們連接到awakeFromNIB中的代碼。

即使您想將不同的視圖控制器連接到故事板中的視圖,您也不能。我會假設它也無法更改故事板中的rootViewController出於同樣的原因。

故事板是一個很好的抽象概念,然而,它們下面是一個普通的老筆尖,如果你想靈活地將任何VC編碼到任何視圖,並替換你的rootViewController,你將需要創建另一個包含這些視圖的筆尖,作爲故事板不會讓你在飛行中重新配置它。

+0

正確的,你不能改變的下一個開發者rootViewController,但是您可以通過在viewDidLoad中執行segue來讓應用打開到第二個viewController。我就是這樣做的。 – Fogmeister

2

您可以設置一個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:我知道這個問題已經被問了很久以前,但因爲沒有可以接受的答案,這不是太晚尋找這個答案;-)

相關問題