1

我在 xcode 中使用 storyBoards,我正在制作一个作为免责声明的 alertView。当按下所选按钮(是/否)时,我想切换并保存 rootViewController。我的意思是,当按下是时,我希望下次启动应用程序时使用不同的 rootViewController 启动。但是,如果在使用情节提要时 rootViewController 由 MainStoryBoard 中的箭头指定,我该怎么做?先感谢您

4

3 回答 3

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:我知道这个问题很久以前就被问过了,但由于没有可接受的答案,对于下一个寻找这个答案的开发人员来说还为时不晚 ;-)

于 2014-06-12T14:25:05.140 回答
1

通常,您不能在情节提要中重用视图或视图控制器。它们是连接到 awakeFromNIB 中的代码的静态表示。

即使您想将不同的视图控制器连接到情节提要中的视图,您也无法做到。我会假设出于同样的原因也无法更改情节提要中的 rootViewController。

Storyboard 是很好的抽象,然而,在它们下面是一个普通的旧 nib,如果你想灵活地将任何 VC 编码到任何视图,并替换你的 rootViewController,你将需要创建另一个包含这些视图的 nib,因为故事板将不允许您即时重新配置它。

于 2012-09-24T08:21:47.727 回答
1

我这样做的方法是在 RootViewController viewDidLoad 方法中检查类似的情况。

您可以检查用户是否接受了条款等...(将其存储在 NSUserDefaults 或其他东西中)

如果他们在 RootViewController 的 viewDidLoad 中执行 segue 到您希望在应用程序启动时将它们带到的 viewController。

这种转场将在屏幕上出现任何内容之前发生,因此用户会认为应用程序已直接启动到新屏幕中。

此外,现在您的 popToRootViewController 方法会将您带到错误的屏幕。所以看看放松动作。这是一种无需多次弹出即可返回堆栈中任何位置的 viewController 的方式。

如果您需要,我可以找到一个链接,其中包含有关放松操作的更多信息。

于 2012-09-24T07:51:44.947 回答