如何使用UIStepper更改Realm Model对象中的属性?

时间:2016-09-26 18:48:44

标签: swift uilabel realm uistepper

我目前有一个名为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

2 个答案:

答案 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答案。