2016-01-19 2 views
3

Я поместил шаговый механизм как выходы, так и действия в ячейку tableview и используя делегат протокола, чтобы подключить его к tableview. Когда я постучал по шагу в первой строке, значение шага выглядит нормальным в первой строке, но оно также появляется в некоторой случайной строке. как это исправить?Stepper on tableview cell (swift)

TableViewCell

protocol ReviewCellDelegate{ 
    func stepperButton(sender: ReviewTableViewCell) 
} 

class ReviewTableViewCell: UITableViewCell { 
    @IBOutlet weak var countStepper: UIStepper! 
    @IBOutlet weak var stepperLabel: UILabel! 

override func awakeFromNib() { 
    super.awakeFromNib() 
    // Initialization code 
} 

override func setSelected(selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 

    // Configure the view for the selected state 
} 

@IBAction func stepperButtonTapped(sender: UIStepper) { 
    if delegate != nil { 
     delegate?.stepperButton(self) 
     stepperLabel.text = "x \(Int(countStepper.value))" 

    } 
} 

ViewController

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cellIdentifier = "reviewCell" 
    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! ReviewTableViewCell 


    var imageView: UIImageView? 
    let photoG = self.photos[indexPath.row] 
    imageView = cell.contentView.viewWithTag(1) as? UIImageView 
    //let layout = cell.goodiesImage 
    let tag = indexPath.row // +1 
    cell.tag = tag 
    photoG.fetchImageWithSize(CGSize(width: 1000, height: 1000), completeBlock: { image, info in 
     if cell.tag == tag { 
      imageView?.image = image 
      cell.goodiesImage.image = image 
     } 
    }) 

func stepperButton(sender: ReviewTableViewCell) { 
    if let indexPath = tableView.indexPathForCell(sender){ 
     print(indexPath) 
    } 
} 
+1

клетки вернулись из DEQUEUE ** Многоразовые ** CellWithIdentifier повторно используются, когда пользователь прокручивает вид таблицы, вам необходимо обновлять каждый вид соответственно. –

+0

hi @ A-Live как его обновить? –

+0

В любом случае, я просто обновил свой код здесь bcs, я забыл его скопировать, где я должен поставить этот код «stepperLabel.text =« x \ (Int (countStepper.value)) »? –

ответ

1

Как уже упоминалось @ A-Live, ваш компонент повторно используется и поэтому его необходимо обновить.

Так что в вашем контроллере представления:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cellIdentifier = "reviewCell" 
    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! ReviewTableViewCell 


    var imageView: UIImageView? 
    let photoG = self.photos[indexPath.row] 
    imageView = cell.contentView.viewWithTag(1) as? UIImageView 
    //let layout = cell.goodiesImage 
    let tag = indexPath.row // +1 
    cell.tag = tag 
    photoG.fetchImageWithSize(CGSize(width: 1000, height: 1000), completeBlock: { image, info in 
    if cell.tag == tag { 
     imageView?.image = image 
     cell.goodiesImage.image = image 
    } 
}) 
    cell.countStepper.value = XXX[indexPath.row].value; //Here you update your view 
    cell.stepperLabel.text = "x \(Int(cell.countStepper.value))" //And here 

И

func stepperButton(sender: ReviewTableViewCell) { 
    if let indexPath = tableView.indexPathForCell(sender){ 
     print(indexPath) 
     XXX[sender.tag].value = sender.counterStepper.value //Here you save your updated value 
} 
2

Сброс значения шаговых при загрузке вашей ячейки. вы можете сбросить значения свойств ячейки в методе ячейки prepareForReuse. добавьте следующий метод в свой класс ReviewTableViewCell.

override func prepareForReuse() 
{ 
    super.prepareForReuse() 

    countStepper.value = 0.0 
} 
+0

hi @raki все еще переносит значение на другая ячейка –

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

  • Нет связанных вопросов^_^