【问题标题】:creating a step based view controller flow创建基于步骤的视图控制器流程
【发布时间】:2017-10-04 23:42:30
【问题描述】:

因此,如果您查看提供的图片。我想知道实现这样的流程的最佳模式是什么。我可以将一堆 ViewController 串在一起,但我觉得我重复自己的方式太多了。我已经尝试过制作可重复使用的 xib,但即使如此,我最终还是不得不为每个 ViewController 更新步骤并添加内容/输入类型。我至少不会重复故事板中的所有约束。

所以这些都是这个屏幕的常见组件。他们自然会根据步骤保存不同的内容。我也有一个后退按钮。我有一个用于不同输入类型的工厂,它将在这个 xib 中生成渲染自定义视图。我想知道是否有人做过类似的设计,他们最好的实现方式是什么?

注意:我可以分享代码,但目前它非常重复,而且我还有很多故事板/xib,所以我认为有很多可以分享的。图片可能更容易理解。

【问题讨论】:

  • 你试过谷歌搜索 uipageviewcontroller 吗?大量的教程展示了需要做什么。一些带有示例代码...spin.atomicobject.com/2015/12/23/…
  • 我有。我确实在另一个流程中使用了 UIPageViewController,但我不觉得它完全符合我的要求。我正在考虑为此制作一个类似的组件。

标签: ios swift


【解决方案1】:

您可以使用情节提要中的单个视图控制器来完成此操作。

  1. 创建一个视图控制器类文件(在我的例子中它被称为 视图控制器)。
  2. 将视图控制器添加到情节提要中,并将其自定义类名称设置为您刚刚创建的类。
  3. 在导航控制器中嵌入视图控制器(与视图 在情节提要中选择控制器,选择编辑器 > 嵌入 > 导航控制器)。
  4. 在情节提要的视图控制器上创建一个按钮。
  5. 创建一个从按钮到视图控制器的转场——没错,就是包含按钮的同一个视图控制器!为此,控制从按钮拖动到视图控制器。给 segue 一个标识符,例如“nextStep”。

每次点击按钮时,它都会切换到同一视图控制器的新实例。您可以根据需要重复多次。因为您在导航控制器中,所以您可以轻松地向后退。

当然,要做任何有趣的事情,您的视图控制器类将需要跟踪您正在执行的步骤、管理状态、确定您何时到达终点等。

这是视图控制器的一个简单实现,它会随着您的前进而递增步数:

class ViewController: UIViewController {

    var stepNumber = 1

    override func viewDidLoad() {
        super.viewDidLoad()
        self.title = "Step \(stepNumber)"
    }
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "nextStep" {
            if let destination = segue.destination as? ViewController {
                destination.stepNumber = stepNumber + 1
            }
        }
    }
} 

【讨论】:

    【解决方案2】:

    将您的视图控制器模板放入一个独立的 nib 文件中。创建 UIViewController 的自定义子类,该子类使用该 nib 文件并了解如何通过向导的一个步骤呈现数据。在运行时创建子类的一个实例,并为每个步骤提供数据。您可以一次完成所有这些操作(例如,您可以将它们堆叠到 UIPageView 中),或者如果您想以其他方式展示它们,您可以一次只做一个步骤。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      • 1970-01-01
      • 2021-07-10
      • 2014-08-07
      • 2015-04-19
      • 1970-01-01
      相关资源
      最近更新 更多