我来自C#wpf背景,您可以使用一个ViewModel处理多个视图。这是在不相关视图之间共享数据的好方法。但是我无法弄清楚如何在iOS中执行相同的操作,因为您似乎需要为每个视图使用一个Controller。
我要实现的目标是有一个注册序列,其中用户一个接一个地填充5个数据屏幕。我打算为此使用PageViewController,每次单击Next会将它们转移到序列中的下一页。一直以来,将所有输入数据添加到一个父模型对象(在所有五个屏幕中都存在),最后,您可以将全部提交到数据库以进行注册。
到目前为止,我唯一能看到的方法是创建五个单独的ViewController,每个注册屏幕使用一个ViewController,并创建导航逻辑以在单击时显示它们。但是,这a)似乎有些过激,b)意味着随后的每个屏幕和Viewcontroller都不知道用户在先前步骤中输入的信息。
在iOS中执行此操作的正确方法是什么?
您可以通过多种方式来实现。如果您想使用UIPageViewController,实际上可以为注册过程的所有步骤使用一个视图控制器。
主视图控制器将实现协议UIPageViewControllerDataSource。它有两个必需的方法,它们返回内容视图控制器的实例。这些实例可以是任何UIViewController子类的,因此您可以具有五个单独的视图控制器类,或者可以具有同一类的五个实例。
Xcode有一个项目模板“基于页面的应用程序”。对于您来说,这可能是一个很好的示例代码。有一个类DataViewController,它为每个页面实例化。如果您的情况确实很简单,那么这可能是最好的解决方案。
如果使用多个视图控制器,则可以通过重写prepareForSegue(segue:sender :)方法在它们之间传递数据。UIStoryboardSegue对象有权访问目标视图控制器,您可以对其进行强制转换并设置属性。(我假设您正在使用情节提要和剧集。)
另一种方法是不使用UIPageViewController并在一个视图控制器中实现整个过程。可能有一个包含五个容器子视图的视图。最初将显示第一个,然后显示第二个,依此类推。这需要在这些步骤之间进行手动导航,但具有很大的灵活性。它还与MVVM更加一致,因为ViewModel和ViewController之间存在一对一的映射。
通常,iOS应用程序具有很多视图控制器。对于您而言,使用5个对我来说似乎并不过分。它可能是更多的代码,但复杂度却更低。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句