提问人:iLoveIOS 提问时间:9/2/2021 最后编辑:iLoveIOS 更新时间:9/2/2021 访问量:66
iOS - 将 JSON 转换为模型,并根据模型类型,显示 tableviewCell / Reusable UIView 组件并从其子视图中读取值
iOS - Convert JSON to model and based on the model type, display tableviewCell / Reusable UIView component and read the values from their subviews
问:
我有一个要求,服务器将向我们提供屏幕列表,每个屏幕都会有一组特定的问题。
这些问题的问题类型可能有所不同。即
- 有些人可能需要 TextField 来提交答案(对输入进行验证),
- 有些可能有单选按钮(有 YES 和 NO)
- 有些会有复选框
- 有些具有带有动态值的下拉列表
在移动端 (iOS) 中,我们需要从 Server 获取这些问题,将其转储到本地数据库中,然后根据 Screen 和 questionType 显示列表问题(在 Form 中)。
请提出一个好的方法!
我想到的一种方法是为每种问题类型创建自定义视图,即 radioButton 的可重用视图、TextInput 的可重用视图等。
并将所有这些视图添加到堆栈视图中并显示它。
但是,问题是如何保持所有这些添加视图的引用? 我的意思是,如果有 3 个类型为“inputTextfield”的问题,我们可以呈现一个可重用的视图,其中包含问题标签和 UITextfield(提交答案)。但是如何从每个组件中获取值(答案)并以表单形式提交所有问题及其答案?
答:
2赞
schmidt9
9/2/2021
#1
下面是一个简化的起始解决方案,如何将问题绑定到视图并获取视图值。首先,将数据映射到模型,然后应实现如何更新条目内答案的机制(例如,基于控制状态更改)。
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
评论