我在CollectionViewCell中的回调无法正常工作

问题描述 投票:0回答:2

我有一个带有PhoneNumberTextField的简单CollectionViewCell和要发送到我的服务器的回调

class PhoneNumberCollectionViewCell: UICollectionViewCell, NiBLoadable, UITextFieldDelegate {



@IBOutlet weak var phoneLabel: UILabel!
@IBOutlet weak var PhoneNumberTextField: UITextField!
@IBOutlet weak var SecurityLabel: UILabel!

var returnValue: ((_ value: String) -> ())?

override func awakeFromNib() {
    super.awakeFromNib()
    Decorator.decorate(self)

}

func setPhoneLabelText(text: String) {
    phoneLabel.text = text
}

func setSecurityLabel(text: String) {
    SecurityLabel.text = text
}

func textFieldDidEndEditing(_ textField: UITextField) {
    returnValue?(PhoneNumberTextField.text ?? "") // Use callback to return data
}

}

并且我还有一个ViewController和我的CollectionView,并且我无法将我的phoneNumber从单元格获取到ViewController中的变量。这是代码

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let models = model[indexPath.row]

    switch models {
    case .phoneNumber:
        if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: PhoneNumberCollectionViewCell.name, for: indexPath) as? PhoneNumberCollectionViewCell {

            cell.setSecurityLabel(text: "_ALLYOURDATAISINSECUREDAREA")
            cell.setPhoneLabelText(text: "_YOURPHONENUMBER")
            cell.PhoneNumberTextField.text = phoneNumber

            cell.returnValue = { value in
                self.phoneNumber = value
            }
            return cell
        }

并且当我打印从textField获得的内容时,我得到的是nil

   @objc func sendPhoneNumber() {     
    print("PHONE NUMBER IS - \(String(describing: self.phoneNumber))")
}

我在做什么错??

swift callback closures tableview
2个回答
1
投票
您需要为textField设置委托,否则textField委托将无法工作。

override func awakeFromNib() { super.awakeFromNib() Decorator.decorate(self) PhoneNumberTextField.delegate = self }

旁注:不要大写变量和常量。

编辑为第二个问题:您或者想(通过Xib)制作一个IBAction插座,该插座在值更改时被调用,或者:

textField.addTarget(self, action: #selector(textFieldValueChanged), for: .editingChanged)

这两个选项都会在键入或删除字母时调用委托函数。

-1
投票
您是否已经注册了收集视图单元并声明了委托和数据源?
© www.soinside.com 2019 - 2024. All rights reserved.