Swift - 从自定义单元格

时间:2016-05-25 20:12:02

标签: ios swift uicollectionviewcell subclassing

我有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"请更新方法吗?

谢谢

1 个答案:

答案 0 :(得分:1)

我会在viewcontroller中使用UITextfieldDelegate,并在单元格文本字段中设置来自viewcontroller的委托。

您可以填写单元格的位置:

cell.txtField.delegate = self

您现在可以在控制器中实现委托功能