【问题标题】:swift create wizard with page view controller使用页面视图控制器快速创建向导
【发布时间】:2015-10-31 16:43:49
【问题描述】:

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

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

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

但是我怎样才能放置不同的标签和文本字段呢? 我必须将它们全部放在视图控制器中还是可以使用从页面视图控制器加载的不同视图控制器?

感谢您的帮助!!

【问题讨论】:

    标签: ios swift viewcontroller uipageviewcontroller


    【解决方案1】:

    我能想到几个办法

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

    • 创建一组表示所有可能布局的视图控制器,并根据内容(例如问题类型)动态选择您需要的视图控制器。例如,如果它是 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 类型的问题,您可以有默认选项是/否,但也允许选项为真/假之类的其他选项。您将在该视图控制器中使用的控件是 UISwitch。

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

    【讨论】:

      猜你喜欢
      • 2016-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-06
      相关资源
      最近更新 更多