我只想打开一次设置窗口,第一次打开我的应用程序。之后,此设置窗口将不再显示,而是显示应用程序的主视图。
我不知道如何解决这个问题,因为 Storyboard 只有一个初始 ViewController,而我需要两个(一个带有设置的 ViewController,另一个带有我的主视图的 ViewController)。
如何在我的两个 ViewController 之间进行选择?
谢谢。
我只想打开一次设置窗口,第一次打开我的应用程序。之后,此设置窗口将不再显示,而是显示应用程序的主视图。
我不知道如何解决这个问题,因为 Storyboard 只有一个初始 ViewController,而我需要两个(一个带有设置的 ViewController,另一个带有我的主视图的 ViewController)。
如何在我的两个 ViewController 之间进行选择?
谢谢。
我认为最好的方法是使用用户默认值——注册一个默认值,比如 setBool:TRUE forKey:@"NeverOpened",然后检查该值。如果是真的,让你的主视图控制器模态地显示设置控制器,然后当它被关闭时,将“NeverOpened”键的值设置为假。下次打开应用程序时,NeverOpened 将为 false,并且不会显示设置控制器。
您的问题可以分为两部分。首先,要确定用户之前是否运行过该应用程序,您需要查询在用户运行该应用程序的所有时间中持久的内容。对于少量数据,您可以使用 NSUserDefaults,它基本上是一个字典。当您查询 NSUserDefaults 时,如果没有对应键的对象,则 NSUserDefaults 返回 nil。利用这一点,我们可以查询像“hasRunKey”这样的键。如果它返回 nil,则用户之前没有运行过应用程序,我们应该为 hasRunKey 设置对象,这样我们将来就不会得到 nil。
if (![[NSUserDefaults standardUserDefaults] objectForKey:@"hasRunKey"]) {
[[NSUserDefaults standardUserDefaults] setObject: [NSNumber numberWithBool:YES] forKey:@"hasRunKey"];
[[NSUserDefaults standardUserDefaults] synchronize];
// Present the settings view controller -- see explanation below.
[self performSegueWithIdentifier:@"My Identifier" sender:self];
} else {
// Do what you normally do.
}
对于第二个问题,显示设置视图控制器,您应该添加一个新文件和子类 UIViewController 与某种 MySettingsViewController 类。然后,在您的故事板中,从侧面板中拖出一个 UIViewController 对象。在该视图控制器的身份检查器中,将类设置为您刚刚创建的 MySettingsViewController。(有关位置请参见此图片:https ://www.evernote.com/shard/s230/sh/ac134774-530f-4649-b3a2-e46b8d712c78/0352134cc8fab7241d97292f4d6ff464 )。
选择您的第一个视图控制器并按住 Ctrl 并拖动到 MySettingsViewController 以在两者之间创建一个 segue。单击您在情节提要中创建的 segue,并使用属性检查器窗口为其指定一个标识符。此时您还可以选择您希望如何呈现视图控制器;我推荐 modal 用于您的目的。
正如 Nikolai 建议的那样,您的第一个视图控制器的 viewDidLoad 方法是此代码的好地方。
我强烈推荐观看例如 Paul Hegerty 的 iTunes U 讲座关于 iOS 开发——它涵盖了这些基础知识,例如使用故事板和在它们之间进行切换。
在您的主视图控制器的viewDidLoad:
方法中检查 first-app-start ,如果是,则在没有动画的情况下推送设置控制器。