在我的应用中,我想添加一个步进器,以便用户可以将值从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
}
}
}
}
最佳答案
与其让表格视图控制器进入每个单元并进行大量摆弄,不如让单元负责使步进器和标签保持同步。
将一个属性添加到单元格类,它是步进器的值。为该属性使用一个自定义设置器,该属性将同时更新步进器和标签,并使用一个自定义获取器来返回当前的步进器值。敲击步进器时的UIAction
方法仅需担心将标签设置为正确的值。
如果您需要表视图控制器立即知道步进器值更改,请使用委托协议或发布有关值已更改的通知。
编写完所有代码后,请确保已将所有插座连接到单元中,并在轻按步进器时有动作发送到单元。
另外,由于仅将labelwithStepper
的文本设置为"Value:"
,因此您可以直接在IB中编辑标签,并减少一个出口。
关于ios - Swift:原型(prototype)单元中的步进器,如何刷新标签文本?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30412409/