swift 使用页面视图控制器创建向导

swift create wizard with page view controller

我正在尝试创建一个问题向导,用户必须在其中回答一些问题...问题是,我想将它们分组在三个页面上(在每个页面上放置一些表单字段)并让他浏览它.最后,当所有数据都填好后,我想发送给REST Api.

我已设置好一切并正常运行,但我不知道如何实施该向导。 在试用了页面视图控制器之后,我想也许我可以用它来做这件事。但老实说,我遵循了一个教程,其中加载了一个带有图像视图的视图控制器,并且图像来自保存图像的数组...

这很简单,因为通过故事板放置图像视图很容易,而且约束也很容易处理..

但是如何放置不同的标签和文本字段? 我是否必须将它们全部放在视图控制器中,或者我可以使用从页面视图控制器加载的不同视图控制器吗?

感谢您的帮助!!

我能想到几个办法

  • 为您提到的所有问题创建单独的视图控制器,并将标签和文本字段显式放置在 Interface Builder 中。如果问题具有相似的潜在回答,这可能会引入大量重复。

  • 创建一组表示所有可能布局的视图控制器,并根据内容(例如问题类型)动态选择您需要的布局。例如,如果它是 4 项选择或 3 项选择多项选择题,或者带有文本字段或文本视图作为答案的开放式问题,等等。然后可以根据您的问题数据的定义方式重复使用这些问题。

  • 创建一种动态指定所有布局变量的方法——也许是一个 JSON 文档——您可以在代码中动态添加所有内容,包括控件定位。尽管约定可能比在代码中完全显式放置更容易实现。

如果是我,我可能会选择这两个中的第二个,并在 JSON 文档中开发元数据 question/answer 描述。这样的事情可能会让你开始:

{
  "questions" : [
    {
      "question" : "What was your favorite part of the course?",
      "type" : "multi",
      "options" : [
        "Introduction",
        "Content",
        "Conclusion"
      ]
    },
    {
      "question" : "How would you improve the course if you could?",
      "type" : "open-ended",
      "options" : []
    },
    {
      "question" : "Did your lab partner provide adequate input?",
      "type" : "bool",
      "options" : [
        "Yes",
        "No"
      ]
    }
  ]
}

您可以分析问题类型字段并从中确定要使用哪个视图控制器。例如,如果您有多项选择,您可以让它包含一个 table 视图,该视图将加载所有选项并允许用户点击包含选项的 table 单元格并切换复选框在电池配件中。

对于开放式问题,只需忽略 "options" 数组。在您针对此类问题的视图控制器中,只需在标签中显示问题,然后在文本字段中显示答案。

或者对于 bool 类型的问题,您可以使用 yes/no 的默认选项,但也允许选项为 true/false 之类的其他选项。您将在该视图控制器中使用的控件是 UISwitch。

无论如何,自从你定义它以来,选项是相当开放的,但我肯定会尝试在使用你自己的元数据 DSL 保持动态与不为自己做太多工作之间找到一个很好的平衡,这不是值得。我选择 JSON 是因为你可以将它捆绑在你的应用程序中并从磁盘加载,或者你可以轻松地从端点下载它,如果你希望它是可以定期更新的东西而无需重新构建您的应用程序。