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

时间:2015-10-31 16:43:49

标签: ios swift viewcontroller uipageviewcontroller

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

我已经设置好了所有工作,但我不知道如何实现向导。 在使用页面视图控制器后,我想也许我可以使用它。但老实说,我遵循了一个教程,其中加载了一个带有图像视图的视图控制器,图像来自一个包含图像的数组......

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

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

THX为您提供帮助!

1 个答案:

答案 0 :(得分:0)

我可以想到几个方法

  • 创建单独的视图控制器,标签和文本字段显式放在Interface Builder中,用于解决您提到的所有问题。如果问题有类似的潜在反应,这可能会引入很多重复。

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

  • 创建一种动态指定所有布局变量的方法 - 也许是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"
      ]
    }
  ]
}

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

对于一个开放式问题,只需忽略&#34;选项&#34;阵列。在该类型问题的视图控制器中,只需在标签中显示问题,然后在答案的文本字段中显示。

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

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