使用Swift和iOS 8 Storyboard登录屏幕

使用Swift和iOS 8 Storyboard登录屏幕,第1张

概述我在处理iOS应用程序的登录流程时遇到了很多麻烦.我想要实现的故事板的图像如下 我正在尝试实现一个可选的登录屏幕,该屏幕仅在用户首次打开应用程序并且尚未登录时显示.目前,我将Tab Bar Controller设置为根视图控制器.但是,我无法弄清楚如何处理这些视图控制器之间的交换. 我试图用以下代码简单地按下登录屏幕.但是,它不起作用.我相信标签栏控制器不允许推送新视图控制器的问题. func a 我在处理iOS应用程序的登录流程时遇到了很多麻烦.我想要实现的故事板的图像如下

我正在尝试实现一个可选的登录屏幕,该屏幕仅在用户首次打开应用程序并且尚未登录时显示.目前,我将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登录屏幕所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1043256.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存