如何确定在集合视图中编辑哪个单元格的文本字段?

时间:2016-03-13 17:55:47

标签: ios swift uicollectionview uitextfield

我可以访问哪些属性来查找?

我从this tutorial,学到一些快速的东西,我决定给自己一些问题。一个是在教程中,为了编辑名称,有一个UIAlert。我想摆脱它,而是用UITextField代替UILabel,这样用户只需点击一个名字,然后进行编辑即可。我会使用textFieldDidEndEditing(textField: UITextField)函数来更新模型,这是一个名称和图片文件名的字典。

我将视图控制器设置为UITextFieldDelegate,我放入了该功能,但现在我卡住了,因为虽然文本在其中一个单元格中更新得很好,但我不知道如何告诉它发生在哪个牢房。

1 个答案:

答案 0 :(得分:2)

在这种情况下,您可以考虑将UITextField子类化为引用Dictionary项目。

class DictionaryTextField: UITextField {
    var item: [String : AnyObject]?
}

同时创建一个UITableViewCell的子类,将DictionaryTextField作为IBOutlet属性保留在上面。

class TextFieldTableViewCell: UITableViewCell {
    @IBOutlet weak var textField: DictionaryTextField!
}

完成上述设置后,可以在Dictionary中设置数据源的func tableView(:, cellForRowAtIndexPath: )项。

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("CellIdentifier", forIndexPath: indexPath) as! TextFieldTableViewCell

    cell.textField.delegate = self
    let item = items[indexPath.row]
    cell.textField.item = item
    cell.textField.text = "TextField \(item["name"]!)"

    return cell
}

稍后,在UITextFiedDelegate中,将textField强制转换为DictionaryTextField。然后可以直接检索该项目。

func textFieldDidBeginEditing(textField: UITextField) {
    guard let textField = textField as? DictionaryTextField else {
        return
    }
    print("Did begin editing: \(textField.item)")
}

可以使用以下链接重新下载修订后的代码:https://db.tt/8j9ENf7b