2017-04-01 47 views
1

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

有人可以指出任何示例代码做类似的东西吗?

我在理解iOS概念时错过了一些东西,我正在构建一个包含一些UI流的iOS框架,这有可能吗?

+0

有人可以帮忙吗? – Swamy

+0

你试过[这](https://mobilefirstplatform.ibmcloud.com/tutorials/en/foundation/6.3/authentication-security/custom-authenticator-login-module/custom-authenticator-login-module-native-ios-应用程序/)已经? –

回答

2

我会建议一个委托模式,因为回调更为一次性,而委托更好地服务于持续帮助对象的生命周期的目的。无论如何,我已经创建了一个例子来应对你的要求,git它here(框架+测试应用程序包括)

它涉及一个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: 
       () 
      } 
     } 

在测试应用程序中我包含最低工作流程供您测试。

让我知道这是你需要什么,或者如果你想调查委托模式,我认为这会更适合这个。

+0

我想赚取这种赏金,所以,如果有什么灰色的..让我知道,我可以帮助。 –

+0

希望你明白了:) – Swamy

1

试试1)IcaliaLabs/LoginKit(https://github.com/IcaliaLabs/LoginKit)。 LoginKit是一种快速简便的方式,可以将登录/注册用户体验添加到您的iOS应用。

2) TigerWolf/LoginKit https://github.com/TigerWolf/LoginKit 
相关问题