我正在努力在第一次运行App时创建一个欢迎页面。 实际上,我已经完成了这个App UI的所有内容,但所有内容都基于故事板。 (因此,有趣的应用程序'在AppDelegate.swift中为空)
现在,我设计了一个基于代码的欢迎页面" welcomeController()"
我在AppDelegate中添加了以下代码 - >有趣的应用程序来检查是否正在进行午餐
window = UIWindow(frame: ScreenBounds)
window!.makeKeyAndVisible()
let isFristOpen = NSUserDefaults.standardUserDefaults().objectForKey("isFristOpenApp")
if isFristOpen == nil {
window?.rootViewController = welcomeController()
NSUserDefaults.standardUserDefaults().setObject("isFristOpenApp", forKey: "isFristOpenApp")
}else {
window!.rootViewController = MainTabBarController()
}
欢迎页面工作正常,但MainTabBarController()(在故事板中标识)刚刚显示为空白。当我在欢迎页面的最后一页中单击完成按钮(调用"窗口!.rootViewController = MainTabBarController()"通过通知中心)时,它也显示为空白(当然)。
那么,我怎么能达到这样的要求呢?在登录时可能会有同样的想法吗?
答案 0 :(得分:2)
尝试不是从AppDelegate实例化欢迎屏幕,而是从最初的ViewController实例化。
在viewDidLoad()中的初始ViewController中,使用NSUserDefaults添加对isFristOpenApp的检查,如果它是第一次暴露给用户的app,则只需使用storyboard标识符从storyboard调用instantiate。像这样:
override func viewDidLoad() {
let userDefaults = NSUserDefaults.standardUserDefaults()
let isFristOpen = userDefaults.boolForKey("isFristOpenApp")
if isFristOpen == true {
if let welcomeController = storyboard?.instantiateViewControllerWithIdentifier("WelcomeController") as? WelcomeController {
self.presentViewController(welcomeController , animated: true, completion: nil)
}
}
}
在welcomeController中的某个位置,您可以将isFirstOpen设置为false:
let userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.setBool(false, forKey: "isFristOpenApp")
答案 1 :(得分:0)
我会这样做:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// show Welcome View
let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
let welcomeController = mainStoryboard.instantiateViewControllerWithIdentifier("welcomeController") as! WelcomeController
self.window?.rootViewController = welcomeController
// Override point for customization after application launch.
return true
}
这将显示应用程序启动时的“欢迎视图”
并在WelcomeView中使用它来加载MainTabBar
func showMainTab() {
let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
let tabBarController = mainStoryboard.instantiateViewControllerWithIdentifier("tabBarController") as! MainTabBarController
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
appDelegate.window?.rootViewController = tabBarController
}