UITableViewCell中的iOS输入

时间:2016-02-08 18:30:41

标签: ios swift

我已经按照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
            }
        }
    }

2 个答案:

答案 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;