【问题标题】:Display settings window only once仅显示一次设置窗口
【发布时间】:2012-09-26 02:31:13
【问题描述】:
我想只打开一次设置窗口,第一次打开我的应用程序。
之后,此设置窗口将不再显示,而是显示应用程序的主视图。
我不知道如何解决这个问题,因为 Storyboard 只有一个初始 ViewController,而我需要两个(一个带有设置的 ViewController,另一个带有我的主视图的 ViewController)。
如何在两个 ViewController 之间进行选择?
谢谢。
【问题讨论】:
标签:
iphone
ios
xcode
ios5
storyboard
【解决方案1】:
我认为最好的方法是使用用户默认值——注册一个默认值,比如 setBool:TRUE forKey:@"NeverOpened",然后检查该值。如果是真的,让你的主视图控制器模态地显示设置控制器,然后当它被关闭时,将“NeverOpened”键的值设置为假。下次打开应用时,NeverOpened 将为 false,并且设置控制器不会出现。
【解决方案2】:
在主视图控制器的 viewDidLoad: 方法中检查 first-app-start,如果是,则推送设置控制器而不使用动画。
【解决方案3】:
您的问题可以分为两部分。首先,要确定用户之前是否运行过该应用程序,您需要查询在用户运行该应用程序的所有时间中持久的内容。对于少量数据,您可以使用 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,并使用属性检查器窗口为其指定一个标识符。此时您还可以选择您希望如何呈现视图控制器;我推荐模态用于您的目的。
正如 Nikolai 所建议的,您的第一个视图控制器的 viewDidLoad 方法是此代码的好地方。
我强烈建议您观看例如Paul Hegerty 的 iTunes U 讲座介绍了 iOS 开发——它涵盖了这些基础知识,例如使用故事板和在它们之间切换。