我正在尝试实现一个可选的登录屏幕,该屏幕仅在用户首次打开应用程序并且尚未登录时显示.目前,我将Tab bar Controller设置为根视图控制器.但是,我无法弄清楚如何处理这些视图控制器之间的交换.
我试图用以下代码简单地按下登录屏幕.但是,它不起作用.我相信标签栏控制器不允许推送新视图控制器的问题.
func application(application: UIApplication,dIDFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { //stuff if userLoggedIn { // Do nothing } else { //get access to login vIEw var storyboard = UIStoryboard(name: "Main",bundle: nil) var vIEwController = storyboard.instantiateVIEwControllerWithIDentifIEr("signupVIEw") as UIVIEwController; // Then push login vIEw var rootVIEwController = self.window!.rootVIEwController as UITabbarController; rootVIEwController.pushVIEwController(vIEwController,animated: true) } // OverrIDe point for customization after application launch. return true}@H_404_6@有没有办法在不推入导航控制器的情况下切换视图控制器?任何关于如何处理这种登录流程的建议将不胜感激.
我通过“LaunchVIEwController”来实现这个目的,它确定它是否应该呈现Login视图或主导航控制器.将启动视图标记为故事板中的初始视图,并在其中编写逻辑以确定要显示的内容.对于用户来说,该过程通常非常快速且不明显.
更新:
正如我在评论中所提到的,我走的是另一个方向.现在在App Delegate的应用程序(application:dIDFinishLaunchingWithOptions :)方法中,我执行必要的逻辑来确定哪个视图应该是rootVIEwController并使用以下内容将其设置在那里.
extension AppDelegate { enum LaunchVIEwController { case Login,Dashboard var vIEwController: UIVIEwController { switch self { case .Login: return StoryboardScene.Login.LoginScene.vIEwController() case .Dashboard: return StoryboardScene.Dashboard.initialVIEwController() } } /// Sets `UIWindow().rootVIEwController` to the appropriate vIEw controller,by default this runs without an animation. func setAsRootvIEwController(animated animated: Bool = false) { let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate let window = appDelegate.window! let launchVIEwController = vIEwController log.info?.message("Setting \(launchVIEwController.dynamicType) as rootVIEwController") if let rootVIEwController = window.rootVIEwController where rootVIEwController.dynamicType != launchVIEwController.dynamicType && animated { let overlayVIEw = UIScreen.mainScreen().snapshotVIEwAfterScreenUpdates(false) launchVIEwController.vIEw.addSubvIEw(overlayVIEw) UIVIEw.animateWithDuration(0.3,animations: { overlayVIEw.Alpha = 0.0 },completion: { _ in overlayVIEw.removeFromSupervIEw() }); } window.rootVIEwController = launchVIEwController window.restorationIDentifIEr = String(launchVIEwController.dynamicType) if window.keyWindow == false { window.makeKeyAndVisible() } } }}@H_404_6@请注意,StoryboardScene不是默认类型,我使用https://github.com/AliSoftware/SwiftGen来生成它.
My App Delegate方法看起来像这样.
if window == nil { window = UIWindow(frame: UIScreen.mainScreen().bounds)}if isRestoringState == false { if let _ = lastUsedAccount { LaunchVIEwController.Dashboard.setAsRootvIEwController() } else { LaunchVIEwController.Login.setAsRootvIEwController() }}@H_404_6@使用logout方法更新注释
func handlelogout(notification: NSNotification) { LaunchVIEwController.Login.setAsRootvIEwController(animated: true) lastUsedAccount = nil}@H_404_6@ 总结以上是内存溢出为你收集整理的使用Swift和iOS 8 Storyboard登录屏幕全部内容,希望文章能够帮你解决使用Swift和iOS 8 Storyboard登录屏幕所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)