是否有人知道是否存在以MVC方式以编程方式处理segse的特定模式? 我认为最好的方法是使用控制器中的事件系统。 我希望所有视图控制器连接到此导航控制器,而不是处理viewController逻辑本身内的所有逻辑。我想出去源这个逻辑Segmented Programatically Pattern
感谢
是否有人知道是否存在以MVC方式以编程方式处理segse的特定模式? 我认为最好的方法是使用控制器中的事件系统。 我希望所有视图控制器连接到此导航控制器,而不是处理viewController逻辑本身内的所有逻辑。我想出去源这个逻辑Segmented Programatically Pattern
感谢
在大部分的视图控制器,你将有机会获得一个prepareForSegue
功能,一个名为sender
一个参数。
如果您用performSegue(withIdentifier: "mySegueID", sender: yourVC)
以编程方式启动segue,那么将调用此函数,并且您将能够将信息从发送者传递到新的视图控制器。
在这个函数中,为了获得下一个VC的句柄,使用segue.destinationViewController
。
我不知道一个特定的模式,但一个简单的方法来编程方式处理2 UIViewController
之间的转换可能是有一个分开的经理,他们的工作就是推/提供过流/不管新的控制器,并弹出/解雇/任何目前的控制器旧的。
我通常这样做的方式是让我们可以命名为WorkflowManager
的类,它将处理所有转换。与此Manager关联,您声明WorkflowManagerComponent
协议,并实现它:
protocol WorkflowManagerComponent {
var completionHandler: (hasCompleted:Bool,data:Any)->() {get set}
}
请致电completionHandler(true,someData)
当用户点击“下一个”按钮,或completionHandler(false,nil)
当用户点击一个“每个UIViewController中实现这一点,例如返回键。
然后在您的工作流程管理器,您可以根据在completionHandler
发送的参数进行过渡到下一首或上UIViewController
:
//init viewController1 ...
viewController1.completionHandler = onViewController1Completes
// ...
func onViewController1Completes(_ completed: Bool, data: Any) {
if hasCompleted {
//init viewController2 ...
viewController2.data = data
viewController2.completionHandler = onViewController2Completes
//Push the new vc
viewController1.navigationController.push(viewController2, animated: true)
} else {
//The vc1 was presented as a modal, dismiss it
viewController1.dismiss()
}
}
这样每个UIViewController
从他人分开,释放掉任何转换逻辑。
抱歉,延迟反馈。谢谢Imotep - 我会研究它。 – mogio
navigationController.pushViewController和navigationController.popViewController? –
嗨Reinier。当然,我知道这个功能......但它不是mvc安全的......因为VC1必须知道VC2。 真的应该有一个动作的调用..就像“离开屏幕”..控制器(navigationController)然后应该处理逻辑...而不是vc。 – mogio
这就是为什么我要求一个模式。 另外如何处理覆盖菜单和东西......疯狂地定义它们在每个vc或应用程序委托中。 应该有一个类来处理这个逻辑。一个控制器。 – mogio