我目前有一个ViewController
,里面有一个TableView
,叫做SelectedListItemsViewController
。这个ViewController
的TableView
由一个名为SelectedListItemsTableViewCell
的自定义单元格类填充。
我有一个名为selectedListItems
的领域模型对象数组,每个对象都有几个属性。SelectedListItemsTableViewCell
用indexPath.row
对象的listItem
属性填充TableView
,每行有一个UIStepper
,旁边有一个UILabel
,(到目前为止)每行显示UIStepper.value
。理想情况下,标签将反映每行的listItemWeight
属性,并在增加或减少该行时更改它。
class SelectedListItemsTableViewCell: UITableViewCell {
@IBOutlet var selectedListItemLabel: UILabel!
@IBOutlet weak var listItemWeightLabel: UILabel!
@IBOutlet weak var stepperControl: UIStepper!
@IBAction func stepperValueChanged(sender: UIStepper) {
listItemWeightLabel.text = Int(sender.value).description
}
}
在我的ViewController
的cellForRowAtIndexPath
,我已经配置单元格如下:
// Configure the cell...
cell.selectedListItemLabel.text = selectedListItems[indexPath.row].listItem
cell.listItemWeightLabel.text = "(selectedListItems[indexPath.row].listItemWeight)"
它完美地加载了listItem
属性,并且listItemWeight
属性正确显示,但是只要我对UIStepper
进行递增或递减,它就会变得混乱。
如何正确链接我的UILabel和uistep到[indexPath.row].listItemWeight
?
在步进器更新时调用的相同方法中,更新listItem
。然而,由于此条目存储在您的Realm数据库中,您将不得不获得Realm数据库的实例并将更改写入数据库。
你可以通过让你的TableViewCell保持listItem的实例来做到这一点。你的新TableViewCell类看起来像这样:
class SelectedListItemsTableViewCell: UITableViewCell {
@IBOutlet var selectedListItemLabel: UILabel!
@IBOutlet weak var listItemWeightLabel: UILabel!
@IBOutlet weak var stepperControl: UIStepper!
var listItem: Item?
@IBAction func stepperValueChanged(sender: UIStepper) {
listItemWeightLabel.text = Int(sender.value).description
if let listItem = listItem {
let realm = try! Realm
try! realm.write {
listItem.listItemWeight = Int(sender.value) ?? 0
}
}
}
}
上面的答案对引导我找到问题的实际解决方案很有帮助,但是如果将来有人好奇的话——我最终使用了闭包。
在我的自定义单元格类中,我使用
@IBAction func stepperValueChanged(sender: UIStepper) {
selectedListItemLabel.text = Int(sender.value).description
tapped?(self)
}
在我的视图控制器中,我做了
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! SelectedListItemsTableViewCell
cell.stepperControl.value = selectedListItems[indexPath.row].listItemWeight
// Configure the cell...
cell.tapped = { (selectedCell) -> Void in
selectedListItems[indexPath.row].listItemWeight = cell.stepperControl.value
}
这允许我访问每个单元格的UIStepper
在视图控制器文件。
它帮助阅读flashadvanced的选项2在这个线程的答案