我目前有一个名为ViewController
的{{1}} TableView
。此SelectedListItemsViewController
的{{1}}由名为ViewController
的自定义单元格类填充。
我有一个名为TableView
的Realm Model Objects数组,每个对象都有几个属性。 SelectedListItemsTableViewCell
使用该selectedListItems
对象的SelectedListItemsTableViewCell
属性填充TableView
,并且每行的listItem
下一个indexPath.row
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
}
}
的{{1}}中,我已经像这样配置了单元格:
ViewController
它完美地加载了cellForRowAtIndexPath
属性,并且 // Configure the cell...
cell.selectedListItemLabel.text = selectedListItems[indexPath.row].listItem
cell.listItemWeightLabel.text = "\(selectedListItems[indexPath.row].listItemWeight)"
属性显示正确,但只要我在listItem
上增加或减少它就会搞砸了。
如何将我的UILabel和UIStepper正确链接到listItemWeight
?
答案 0 :(得分:0)
在步进更新时调用的方法相同,请更新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
}
}
}
}
答案 1 :(得分: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
。
有助于在this thread中阅读flashadvanced的选项2答案。