我如何使用uistep来改变一个领域模型对象的属性



我目前有一个ViewController,里面有一个TableView,叫做SelectedListItemsViewController。这个ViewControllerTableView由一个名为SelectedListItemsTableViewCell的自定义单元格类填充。

我有一个名为selectedListItems的领域模型对象数组,每个对象都有几个属性。SelectedListItemsTableViewCellindexPath.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
    }
}

在我的ViewControllercellForRowAtIndexPath,我已经配置单元格如下:

    // 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在这个线程的答案

最新更新