Swift检测.xib文件中文本字段的更改

Swift检测.xib文件中文本字段的更改,swift,tableview,xib,textfield,Swift,Tableview,Xib,Textfield,我的问题是,我在一个可扩展的表视图中有一个textfield,它由cellDescription plist指定。在此表视图中,当地址部分展开时,会弹出一个文本字段,用户可以在其中输入地址。用户必须按键盘上的回车键(或回车键)才能保存地址。我想知道是否有一种方法可以检测textfield中的更改,这种方法可以持续更新textfield值,这样用户就不必输入return来保存地址。下面是我的代码当前的结构,但我感到困惑,因为textfield不在常规视图控制器中,而是在一个外部xib文件中 fun

我的问题是,我在一个可扩展的表视图中有一个textfield,它由cellDescription plist指定。在此表视图中,当地址部分展开时,会弹出一个文本字段,用户可以在其中输入地址。用户必须按键盘上的回车键(或回车键)才能保存地址。我想知道是否有一种方法可以检测textfield中的更改,这种方法可以持续更新textfield值,这样用户就不必输入return来保存地址。下面是我的代码当前的结构,但我感到困惑,因为textfield不在常规视图控制器中,而是在一个外部xib文件中

func configureTableView() {
    tblExpandable.delegate = self
    tblExpandable.dataSource = self
    tblExpandable.tableFooterView = UIView(frame: CGRect.zero)
    tblExpandable.register(UINib(nibName: "TextfieldCell", bundle: nil), forCellReuseIdentifier: "idCellTextfield")

}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let currentCellDescriptor = getCellDescriptorForIndexPath(indexPath)
    let cell = tableView.dequeueReusableCell(withIdentifier: currentCellDescriptor["cellIdentifier"] as! String, for: indexPath) as! CustomCell


    if currentCellDescriptor["cellIdentifier"] as! String == "idCellTextfield" {
        cell.textField.placeholder = currentCellDescriptor["primaryTitle"] as? String
        valueOfInterest = cell.textField.text!

    }


    cell.delegate = self

    return cell
}

func textfieldTextWasChanged(_ newText: String, parentCell: CustomCell) {
    let parentCellIndexPath = tblExpandable.indexPath(for: parentCell)

    var address = ""

    address = "\(newText)"


    ((cellDescriptors[0] as! NSMutableArray)[11] as AnyObject).setValue(address, forKey: "primaryTitle")
    location = (((cellDescriptors[0]) as! NSMutableArray)[11] as! NSDictionary)["primaryTitle"]! as! String
    tblExpandable.reloadData()
}

这里您的CustomCell中有文本字段。因此,将CustomCell类中文本字段的出口设置为:

    @IBOutlet weak var textField:UITextField!

然后将CustomCell类设置为textField的委托,并实现textField所需的委托方法,以检测textField值的更改。

如何将CustomCell类设置为textField的委托,因为此swift文件没有“override func viewDidLoad(){}”?为什么需要viewDidLoad()方法设置委托。您可以从xib文件或自定义单元格类的awakeFromNib()方法中设置委托。尝试在awakeFromNib()中设置委托,如:“textField.delegate=self”,在模拟器中运行时会导致错误:致命错误:在展开可选值时意外发现nil。我是否未正确设置委托?这可能是因为textField尚未初始化自身。请在视图完全加载后设置委托。您可以在这里尝试其他选项。尝试在Xib文件中设置委托,希望这能解决您的问题。