Swift 我在CollectionViewCell中的回调不';我不能正常工作
我有一个简单的CollectionViewCell,其中包含PhoneNumberTextField和一个我想发送到服务器的回调Swift 我在CollectionViewCell中的回调不';我不能正常工作,swift,callback,closures,tableview,Swift,Callback,Closures,Tableview,我有一个简单的CollectionViewCell,其中包含PhoneNumberTextField和一个我想发送到服务器的回调 class PhoneNumberCollectionViewCell: UICollectionViewCell, NiBLoadable, UITextFieldDelegate { @IBOutlet weak var phoneLabel: UILabel! @IBOutlet weak var PhoneNumberTextField: UITextF
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
}
}
我的CollectionView中还有我的ViewController,我无法在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获得的内容时,我得到了零
@objc func sendPhoneNumber() {
print("PHONE NUMBER IS - \(String(describing: self.phoneNumber))")
}
我在做什么?是否已注册集合视图单元格并声明委托和数据源
let flowLayout = UICollectionViewFlowLayout()
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: flowLayout)
collectionView(PhoneNumberCollectionViewCell.self, forCellWithReuseIdentifier: PhoneNumberCollectionViewCell.name)
collectionView.delegate = self
collectionView.dataSource = self
return collectionView
您需要为textField设置代理,否则textField代理将无法工作
override func awakeFromNib() {
super.awakeFromNib()
Decorator.decorate(self)
PhoneNumberTextField.delegate = self
}
旁注:
不要将变量和常量大写
编辑到第二个问题:
您可以(通过Xib)在值更改时调用iAction
出口,或者:
textField.addTarget(self, action: #selector(textFieldValueChanged), for: .editingChanged)
这两个选项都将在每次键入或删除信件时调用委托函数。您是否设置了
textfield
委托?它与collectionView数据源
无关,textfield委托应在UICollectionViewCell
中设置谢谢!但现在我有另一个问题。我应该经常点击来调用函数textfielddidediting!我有没有其他没有点击的方法???)你是说你必须在textfielddidediting
触发器之前更改目标?为你编辑答案。