如何仅在应用程序第一次运行时在我的 iOS 应用程序中打开页面视图控制器?
Posted
技术标签:
【中文标题】如何仅在应用程序第一次运行时在我的 iOS 应用程序中打开页面视图控制器?【英文标题】:How to open a page view controller in my iOS app only the first time the app runs? 【发布时间】:2016-05-05 22:58:04 【问题描述】:我正在为 ios 创建一个应用程序,我想打开一个页面视图控制器(不是普通视图控制器),但仅在用户第一次打开应用程序时。
问题是我无法在代码中打开新的页面视图控制器。用户将看到的第一个屏幕是登录屏幕,但在第一次访问时切换到页面视图控制器。
这是我目前在登录屏幕视图控制器中的内容:
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let launchedBefore = NSUserDefaults.standardUserDefaults().boolForKey("launchedBefore")
if launchedBefore
//Not the first time, show login screen.
else
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "launchedBefore")
//First time, open a new page view controller.
let secondViewController:InstructionViewController = InstructionViewController()
self.presentViewController(secondViewController, animated: true, completion: nil)
我要打开的页面视图控制器已在情节提要上创建。
【问题讨论】:
你已经接近了,在你完成任何 rootViewController 设置后,你会希望在应用程序委托方法 didFinishLaunchingWithOptions 中显示视图控制器。 【参考方案1】:通过其他答案,我能够解决问题。
在 appDeligate 文件中,您需要将第一个函数替换为:
var window: UIWindow?
var storyboard:UIStoryboard?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
window = UIWindow(frame: UIScreen.mainScreen().bounds)
window?.makeKeyAndVisible()
let launchedBefore = NSUserDefaults.standardUserDefaults().boolForKey("launchedBefore")
if launchedBefore
//Not the first time, show login screen.
storyboard = UIStoryboard(name: "Main", bundle: nil)
let rootController = storyboard!.instantiateViewControllerWithIdentifier("Login")
if let window = self.window
window.rootViewController = rootController
else
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "launchedBefore")
//First time, open a new page view controller.
storyboard = UIStoryboard(name: "Main", bundle: nil)
let rootController = storyboard!.instantiateViewControllerWithIdentifier("Instruction")
if let window = self.window
window.rootViewController = rootController
return true
“登录”和“指令”是(页面)视图控制器的名称。
我不确定这是否是最健壮的代码,但它对我来说很好。
【讨论】:
我认为您还应该通过删除 plist 文件中的条目来禁用(默认)主故事板的自动加载。【参考方案2】:App 代理的 willFinishLaunchingWithOptions 方法将是最佳位置 (AFAIK)。检查条件并相应地设置窗口的根视图控制器。
【讨论】:
如果您需要更多详细信息,请告诉我 作为一个XCode的初学者,我真的不知道从哪里开始,有没有例子可用? 非常感谢,遇到了困难但成功了:)【参考方案3】:这是 Lesley 更新到 Swift 3 的代码:
window = UIWindow(frame: UIScreen.main.bounds)
window?.makeKeyAndVisible()
let launchedBefore = UserDefaults.standard.bool(forKey: "launchedBefore")
if launchedBefore
//Not the first time, show login screen.
storyboard = UIStoryboard(name: "Main", bundle: nil)
let rootController = storyboard!.instantiateViewController(withIdentifier: "webView")
if let window = self.window
window.rootViewController = rootController
else
UserDefaults.standard.set(true, forKey: "launchedBefore")
//First time, open a new page view controller.
storyboard = UIStoryboard(name: "Main", bundle: nil)
let rootController = storyboard!.instantiateViewController(withIdentifier: "progressView")
if let window = self.window
window.rootViewController = rootController
别忘了设置
var storyboard:UIStoryboard?
在 didFinishLaunchingWithOptions 之前,并设置类似于您自己的视图控制器标识符的标识符。
【讨论】:
以上是关于如何仅在应用程序第一次运行时在我的 iOS 应用程序中打开页面视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 iOS 应用程序仅在首次运行时正确检测到当前语言?