2015-05-23 4 views
0

В моем приложении я хочу добавить Stepper, чтобы пользователь мог увеличить значение от 1 до 100.Swift: Stepper внутри ячейки прототипа, как обновить текст ярлыка?

Я могу получить шагомер, чтобы показать, я добавил действие, но метка в 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

Вместо того, чтобы контроллер представления таблицы достигает в каждую клетку и сделать много возился пусть клетка заботиться о сохранении шаговых и этикеток в синхронизации.

Добавить свойство к классу ячеек, которое является значением степпера. Используйте настраиваемый параметр для его свойства, который обновляет как шагомер, так и метку, и настраиваемый getter, который возвращает текущее значение шага. Метод UIAction для того, когда шагомер выстукивается, просто нужно беспокоиться о том, чтобы установить метку на правильное значение.

Если вам требуется, чтобы контроллер табличного представления знал, как только значение шагового параметра изменится, используйте протокол делегата или опубликуйте уведомление о том, что значение изменилось.

После того, как вы установили весь код, убедитесь, что все розетки подключены в ячейке и что в шаге приложено действие, отправленное в ячейку.

Кроме того, поскольку вы только когда-либо устанавливали текст labelwithStepper на номер "Value:", вы можете просто отредактировать ярлык прямо в IB и иметь еще один выход для подключения.

Смежные вопросы