Swift:原型单元格中的步进器,如何刷新标签文本?

时间:2015-05-23 12:01:06

标签: ios uitableview swift uistepper

在我的应用程序中,我想添加一个Stepper,以便用户可以将值从1增加到100。

我可以让步进器显示,我已经添加了动作但是tableview中的标签没有刷新...我需要做一个" self.tableView.reloadRowsAtIndexPaths"每次用户点击步进器?

class SettingsOptionTableViewCell: UITableViewCell {

    @IBOutlet weak var labelvalueforstepper: UILabel!
    @IBOutlet weak var simpleStepper: UIStepper!
    @IBOutlet weak var labelwithStepper: UILabel!

}

class SettingOptionsTableViewController: UITableViewController {

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

            cell = tableView.dequeueReusableCellWithIdentifier("SettingOptionsCell3") as! SettingsOptionTableViewCell
            cell.labelwithStepper.text = "Value:"
            cell.simpleStepper.value = 1
            cell.labelvalueforstepper.text = (cell.simpleStepper.value).description
            cell.simpleStepper.wraps = false
            cell.simpleStepper.autorepeat = true
            cell.simpleStepper.maximumValue = 100

            cell.simpleStepper.addTarget(self, action: "stepperValueChanged:", forControlEvents: UIControlEvents.ValueChanged)

    }


    func stepperValueChanged(sender: UIStepper) {

        let pointInTable: CGPoint = sender.convertPoint(sender.bounds.origin, toView: self.tableView)
        let cellIndexPath = self.tableView.indexPathForRowAtPoint(pointInTable)

        if let myRowSection = cellIndexPath?.section {

            if let myRow = cellIndexPath?.row {

                var device_status: Int = Int(sender.value)

                println(sender.value)
                println(myRow)

                segmentDeviceViewValueChange(myRow, userSelection: device_status)

                let cell: SettingsOptionTableViewCell = self.tableView.dequeueReusableCellWithIdentifier("SettingOptionsCell3", forIndexPath: cellIndexPath!) as! SettingsOptionTableViewCell
                cell.labelvalueforstepper.text = device_status.description

            }

        }
    }
}

1 个答案:

答案 0 :(得分:1)

不要让表视图控制器进入每个单元格并进行大量的摆弄,而是让单元格保持步进器和标签同步。

向单元格类添加属性,该属性是步进器的值。使用自定义setter作为更新步进器和标签的属性,以及返回当前步进器值的自定义getter。点击步进器时的val方法只需要担心将标签设置为正确的值。

如果您需要表视图控制器在步进器值更改时立即知道使用委托协议或发布值已更改的通知。

一旦您准备好所有代码,请确保所有出口都已连接到单元格中,并且在点击步进器时有一个动作发送到单元格。

此外,由于您只将UIAction的文字设置为labelwithStepper,因此您只需在IB中编辑标签,并连接一个较小的插座即可。