Swift - 从自定义单元格传递数据
Swift - Passing data from custom cell
我有 UIViewController,我在其中嵌套了 UICollectionView。对于 UICollectionViewCell,我创建了 subclass "MyCell"
我在每个单元格中都有 UITextField,我想将文本字段中的数据传回父级视图控制器以更新标签。我发现更新标签的唯一方法是使用 NSNotificationCenter 和调用方法来执行更改并从 NSObject class 访问数据。但是,它 returns 零值
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)
}
我的细胞:
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?
}
"print" 方法来自 ViewController 的方法 "updateResultLabel" 显示 "nil"。我显然做错了什么,可能没有在某处初始化字符串。或者可能还有另一种我还没有遇到的方法?
如何将数据从 "MyCell" 传递到 "ViewController" 并更新方法?
谢谢
我会在 viewcontroller 中使用 UITextfieldDelegate 并在单元格文本字段中设置来自 viewcontroller 的委托。
填充单元格的位置可以写入:
cell.txtField.delegate = self
您现在可以在您的控制器中实现委托功能
我有 UIViewController,我在其中嵌套了 UICollectionView。对于 UICollectionViewCell,我创建了 subclass "MyCell"
我在每个单元格中都有 UITextField,我想将文本字段中的数据传回父级视图控制器以更新标签。我发现更新标签的唯一方法是使用 NSNotificationCenter 和调用方法来执行更改并从 NSObject class 访问数据。但是,它 returns 零值
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)
}
我的细胞:
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?
}
"print" 方法来自 ViewController 的方法 "updateResultLabel" 显示 "nil"。我显然做错了什么,可能没有在某处初始化字符串。或者可能还有另一种我还没有遇到的方法?
如何将数据从 "MyCell" 传递到 "ViewController" 并更新方法?
谢谢
我会在 viewcontroller 中使用 UITextfieldDelegate 并在单元格文本字段中设置来自 viewcontroller 的委托。
填充单元格的位置可以写入:
cell.txtField.delegate = self
您现在可以在您的控制器中实现委托功能