UITableViewCell-在动态表格视图中获取UITextField值

时间:2018-07-25 13:20:26

标签: ios swift uitableview uitextfield

问题是,我已经找到的大多数解决方案都涉及使用self.myTableView.cellForRow(at: index) as!方法。 问题是,如果您的UITableView很大,则单元格最终将被重用,并且您将丢失引用。

另一种方法涉及使用textFieldDidEndEditing(_ textField: UITextField),但我不知道这是否是最好的优雅解决方案。

这里有一些我正在使用的代码:

protocol TableViewCompatible {

    var reuseIdentifier: String { get }

    func cellForTableView(tableView: UITableView, atIndexPath indexPath: IndexPath) -> UITableViewCell

}

class NameCellDTO: TableViewCompatible {

    var reuseIdentifier: String {
        return "NameCell"
    }

    var name: String?
    var placeHolder: String

    init(name: String? = nil, placeHolder: String) {
        self.name = name
        self.placeHolder = placeHolder
    }

    func cellForTableView(tableView: UITableView, atIndexPath indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: self.reuseIdentifier, for: indexPath) as! NameCell
        cell.configureWithDTO(self)
        return cell
    }
}

DTO创建:

let nameCell = NameCellDTO(name: "Test", placeHolder: "attributes.user.first_name".localized())

我有一个带有一些TableViewCompatible DTO的阵列 和cellForRow:

func cellForRowAt(tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    guard let item = items.object(index: indexPath.row) else {
        return UITableViewCell()
    }
    return item.cellForTableView(tableView: tableView, atIndexPath: indexPath)
}

1 个答案:

答案 0 :(得分:-1)

您可以尝试

var arr = [String](repeating: "", count: countOfRows)

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell =  ///

    cell.myTextF.delegate = self

    cell.myTextF.tag = indexPath.row

    cell.myTextF.text = arr[indexPath.row]
} 

func textFieldDidEndEditing(_ textField: UITextField) {

    arr[textField.tag] = textField.text!

}