Swift - 从自定义单元格传递数据

Posted

技术标签:

【中文标题】Swift - 从自定义单元格传递数据【英文标题】:Swift - Passing data from custom cell 【发布时间】:2016-05-25 20:12:01 【问题描述】:

我有 UIViewController,我在其中嵌套了 UICollectionView。对于 UICollectionViewCell 我创建了子类“MyCell”

我在每个单元格中都有 UITextField,并希望将文本字段中的数据传递回父视图控制器以更新标签。我发现更新标签的唯一方法是使用 NSNotificationCenter 并调用方法来执行更改并从 NSObject 类访问数据。但是,它返回 nil 值

视图控制器:

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)

我的细胞:

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

数据模型:

import Foundation

class DataModel: NSObject 

    var cellData: String?


ViewController 方法“updateResultLabel”中的“print”方法显示“nil”。我显然做错了什么,可能没有在某处初始化字符串。或者可能还有另一种我还没有遇到过的方法?

请问如何将数据从“MyCell”传递到“ViewController”并更新方法?

谢谢

【问题讨论】:

【参考方案1】:

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

你可以在哪里填充你可以写的单元格:

cell.txtField.delegate = self

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

【讨论】:

谢谢,很有魅力!我找到了关于实现委托here的线程

以上是关于Swift - 从自定义单元格传递数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中将值从自定义单元格设置/传递到视图控制器

将数据从自定义表格视图单元格传递到 UIView 控制器

从自定义单元格重新加载表格视图数据

将数据从自定义表格单元中的 uicollectionview 传递到 viewcontroller

将数据从自定义 UI 单元传递到视图控制器

SWIFT:从自定义单元格中的 UIswitch 展开/折叠自定义单元格