我有UIViewController,其中我嵌套了UICollectionView。对于UICollectionViewCell,我创建了子类" MyCell"
我在每个单元格中都有UITextField,并希望将文本字段中的数据传递回父视图控制器以更新标签。我发现更新标签的唯一方法是使用NSNotificationCenter和调用方法来执行更改并从NSObject类访问数据。但是,它返回nil值
的ViewController:
var dataModel = DataModel() // NSObject class
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.updateResultLabel(_:)), name:"update", object: nil)
}
func updateResultLabel(notification: NSNotification){
resultLabel.text = dataModel.cellData
print(dataModel.cellData)
}
了myCell:
class MyCell: UICollectionViewCell {
@IBOutlet weak var txtField: UITextField!
@IBAction func updateLabel(){
let cell: UICollectionViewCell = txtField.superview!.superview as! UICollectionViewCell
let table: UICollectionView = cell.superview as! UICollectionView
let textFieldIndexPath = table.indexPathForCell(cell)
let dataModel = DataModel()
dataModel.cellData = txtField.text!
print("txtField: \(txtField.text), row: \(textFieldIndexPath?.row)")
NSNotificationCenter.defaultCenter().postNotificationName("update", object: nil)
}
}
直接从故事板中的UITextField - valueChanged触发操作
的DataModel:
import Foundation
class DataModel: NSObject {
var cellData: String?
}
"打印" ViewController的方法" updateResultLabel"显示" nil"。我显然做错了什么,可能没有在某处初始化字符串。或者可能还有另一种方式我可能还没有遇到过?
如何从" MyCell"传递数据?到" ViewController"请更新方法吗?
谢谢
答案 0 :(得分:1)
我会在viewcontroller中使用UITextfieldDelegate,并在单元格文本字段中设置来自viewcontroller的委托。
您可以填写单元格的位置:
cell.txtField.delegate = self
您现在可以在控制器中实现委托功能