如何将登录模块实现为我的 iOS 框架的一部分

斯瓦米

我正在构建一个 iOS 框架,它应该提供一些通用模块,如注册、忘记密码、登录和配置文件等。因此,任何导入我的框架的应用程序都应该能够按原样使用这些屏幕。我面临的挑战是在我的 iOS 框架代码中从一个屏幕导航到另一个屏幕。当从一个屏幕 Login(screen1) 导航到另一个屏幕 Forgot Password(screen2) 时,将在 screen1 视图控制器而不是 screen2 视图控制器中调用处理程序(回调)方法。我们尝试使用 xib 和故事板,但是我没有找到解决方案。

有人可以指出任何具有类似功能的示例代码吗?

我在理解 iOS 概念时是否遗漏了一些东西,我正在构建一个包含一些 UI 流程的 iOS 框架,这可能吗?

安德烈

我建议使用委托模式,因为回调更多是一次性的,而委托可以更好地持续协助对象的生命周期。无论如何,我已经创建了一个示例来满足您的要求,请在此处git (包括框架 + 测试应用程序)

它涉及一个 LoginController,它是框架的主要入口点和管弦乐队。

当您初始化它时,您传递一个回调,该回调将用于发送事件,包括“忘记密码”和“用户想要退出”,这些在枚举中定义。

public enum LoginFrameworkStatus {
    case Login
    case ForgotPassword
    case Help
    case Disaster
    case Exited
    case UserWantsExit
}

类提供了一个入口点来启动这个过程:

public func enterLoginWorkflow(on controller: UIViewController, callback: LoginFrameworkCallback) {
    let myBundle = Bundle(for: LoginController.self)

    if let navi = UIStoryboard(name: "LoginWorkflow", bundle: myBundle).instantiateInitialViewController() as? MySpecialNavigationController {
        presentingController = controller
        navi.loginController = self
        self.callback = callback
        controller.present(navi, animated: true, completion: {
            //presented!
            callback?( .Login, navi, self) //If reference to LoginController is lost, tell the callback there's a problem.. shouldn't happend because we have a strong reference on the navigation controller.
        })
      }   
    }

.. 和一个退出点:

public func leaveLoginWorkflow() {
    presentingController?.dismiss(animated: true, completion: { 
        self.callback?(.Exited, nil,self)
    })
}

因此,您的框架的主界面将是:

LoginController().enterLoginWorkflow(on: self) { (status, controller, loginController) in
            print("\(status) in \(controller?.description ?? "No Controller")")

            switch status {
            case .UserWantsExit:
                loginController?.leaveLoginWorkflow()
            case .ForgotPassword:
                loginController?.leaveLoginWorkflow()
            default:
                ()
            }
        }

在测试应用程序中,我包含了一个最小的工作流程供您测试。

让我知道这是否是您所需要的,或者您是否想研究委托模式,我认为这更适合于此。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章