带有页面视图控制器的swift创建向导



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

我已经把所有的东西都设置好并工作了,但我不知道如何实现向导。在玩过页面视图控制器之后,我想也许我可以用它来实现这一点。但老实说,我遵循了一个教程,其中加载了一个带有图像视图的视图控制器,并且图像来自一个保存图像的阵列。。。

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

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

谢谢你的帮助!!

我能想出几种方法

  • 创建单独的视图控制器,并将标签和文本字段显式放置在界面生成器中,以解决您提到的所有问题。如果问题有类似的潜在答案,这可能会导致大量重复。

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

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

如果是我,我可能会选择其中的第二个,并在JSON文档中开发元数据问答描述。这样的东西可能会让你开始:

{
  "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"
      ]
    }
  ]
}

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

对于开放式问题,只需忽略"选项"数组即可。在该类型问题的视图控制器中,只需在标签中显示问题,然后在文本字段中显示答案。

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

无论如何,自从你定义它以来,选项是非常开放的,但我肯定会尝试在用你自己的元数据DSL保持它的动态性和不为自己做那么多工作之间找到一个很好的平衡——这是不值得的。我选择JSON是因为你可以将其捆绑在你的应用程序中,然后从磁盘加载,或者如果你想让它成为可以定期更新的东西,而不必重新构建应用程序,你也可以很容易地从端点下载它。

最新更新