我有一个简单的 CollectionViewCell,其中包含 PhoneNumberTextField 和一个我想发送到服务器的回调
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,但我无法将我的电话号码从单元格获取到 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))")
}
我做错了什么???
最佳答案
您需要为文本字段设置委托(delegate),否则文本字段委托(delegate)将不起作用。
override func awakeFromNib() {
super.awakeFromNib()
Decorator.decorate(self)
PhoneNumberTextField.delegate = self
}
旁注: 不要将变量和常量大写。
编辑第二个问题:
您想要(通过 Xib)创建一个在值更改时调用的 IBAction
导出,或者:
textField.addTarget(self, action: #selector(textFieldValueChanged), for: .editingChanged)
每次键入或删除字母时,这两个选项都会调用委托(delegate)函数。
关于swift - 我在 CollectionViewCell 中的回调无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60183739/