我已经按照this教程在表格中构建了一个文本字段表单,我已经成功地完成了它,但是在教程中他只使用了一种类型的字段。我希望某些字段有下拉列表,我还会添加其他字段。
我不确定这样做的最佳方式,我猜测这些字段需要在一个数组中,以便更容易管理。我在考虑下面的代码,结构现在只是通用的。
struct DropdownInput {
let name: String
let placeholder: String
let defaultValue: String
let values: [String]
}
struct TextInput {
let name: String
let placeholder: String
let defaultValue: String
}
var formFields: [Any] = [
TextInput(name: "test1", placeholder: "Some value", defaultValue: ""),
DropdownInput(name: "test2", placeholder: "Some value", defaultValue: "", values: ["Test1","TEST2","Test3"]),
]
编辑:我的代码正在运行,但我认为它没有正确解压缩formField对象。它说Any类型的值没有成员名称,我该如何访问这些值?
if self.formFields[indexPath.row] is TextInput {
if let fieldValues: Any = self.formFields[indexPath.row] as? TextInput {
if let cell = tableView.dequeueReusableCellWithIdentifier("cellTextField") as? TextInputTableViewCell {
print(fieldValues.name)
return cell
}
}
}
答案 0 :(得分:1)
回答您的问题“任何没有会员名称” - 只需删除Any并使用
if let fieldValues = formFields[indexPath.row] as? TextInput {
print(fieldValues.name)
}
答案 1 :(得分:0)
如果您有两个不同的单元格,可以使它变得有点简单;
struct TextInput {
let cellIdentifier: String
let name: String
let placeholder: String
let defaultValue: String
let values: [String]
}
var formFields: [TextInput] = [
TextInput(cellIdentifier: "cellTextField", name: "test1", placeholder: "Some value", defaultValue: "", values: []),
TextInput(cellIdentifier: "cellDropdownTextField", name: "test2", placeholder: "Some value", defaultValue: "", values: ["Test1","TEST2","Test3"]),
]
然后;
let txtInput:TextInput = self.formFields[indexPath.row]; //It is not optional, so no if condition.
let cell = tableView.dequeueReusableCellWithIdentifier(txtInput.cellIdentifier, forIndexPath: indexPath) as! UITableViewCell; //It must return cell, if the cell is registered so no if condition here too.
return cell;