1

我有一个要求,其中服务器将为我们提供屏幕列表,并且每个屏幕都会有一组特定的问题。

这些问题的问题类型可能会有所不同。IE

  • 有些可能需要 TextField 来提交答案(对输入进行验证),
  • 其中一些可能有单选按钮(带有是和否)
  • 有些会有复选框
  • 有些有动态值的下拉菜单

在移动端(iOS),我们需要从 Server 获取这些问题,将其转储到本地数据库中,然后根据 Screen 和 questionType 显示一个列表问题(在 Form 中)。

请提出一个好的方法!

我认为为每种问题类型创建自定义视图的一种方法,即 radioButton 的可重用视图、TextInput 的可重用视图等。

并将所有这些视图添加到堆栈视图中并显示它。

但是,问题是如何保持对所有这些添加视图的引用?我的意思是如果有 3 个类型为“inputTextfield”的问题,我们可以呈现一个包含问题标签和 UITextfield(提交答案)的可重用视图。但是如何从每个组件中获取值(答案)并以表格形式提交所有问题及其答案?

4

1 回答 1

2

这是一个简化的起始解决方案,您可以如何将问题绑定到视图并获取视图值。首先,您将数据映射到模型,然后您应该实现如何更新条目内的答案的机制(例如基于控制状态更改)。

import UIKit

struct Question {
    var text: String
    var type: EntryType
    /// use this array to output conditional nested questions
    var subquestions: [Question]
}

struct Answer {
    var text: String
}

enum EntryType {
    case text
    case radio
    case checkbox
    case dropdown
}

class Entry {
    var question: Question
    /// Set this field on text / state change of control
    var answer: Answer?
    var type: EntryType
    
    init(question: Question, type: EntryType) {
        self.question = question
        self.type = type
    }
}

struct CustomView {
    /// Assign this while views creation / output to bind entry and view and to update entry
    var entry: Entry
}

var entries = [Entry]() // TODO: populate array

// ... populate entries using answers and create views based on type
于 2021-09-02T09:52:57.973 回答