滚动时在TableViewCell内的Stepper中重复值

时间:2015-05-19 02:01:29

标签: xcode swift tableview

细胞需要滚动时的步进问题。

My_TableViewCell.swift

import UIKit

class My_TableViewCell: UITableViewCell {

@IBOutlet weak var My_Label1: UILabel!
@IBOutlet weak var My_Label2: UILabel!
@IBOutlet weak var My_Stepper: UIStepper!

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

...    

My_TableViewController.swift

import UIKit

var My_Ids = ["C01","C02","C03","C04","C05","C06","C07","C08","C09","C10"]
var My_Values = ["0","0","0","0","0","0","0","0","0","0"]

class My_TableViewController: UITableViewController {

@IBAction func My_Stepper(sender: AnyObject) {

    let point = sender.convertPoint(CGPointZero, toView: tableView)
    let indexPath = self.tableView.indexPathForRowAtPoint(point)!
    let cell = self.tableView.cellForRowAtIndexPath(indexPath) as! My_TableViewCell
    cell.My_Label2.text = "\(Int(cell.My_Stepper.value))"

}

...

// MARK: - Table view data source

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return My_Ids.count
}

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

    let cell =
    self.tableView.dequeueReusableCellWithIdentifier(
        "My_TableCell", forIndexPath: indexPath)
        as! My_TableViewCell

    let row = indexPath.row
    cell.My_Label1.text = My_Ids[row]
    cell.My_Label2.text = "\(Int(cell.My_Stepper.value))"
    return cell
}

...

当所有单元格都适合“页面”时,步进器运行良好但如果单元格调整大小并且您需要滚动表格视图,则会在其他单元格中重复这些值。

如果更改单元格C06和C07上的值,这将反映C01和C02单元格,反之亦然。

Please view this image showing the snapshots with the errors

1 个答案:

答案 0 :(得分:1)

UITableViewController故意将单元格重用为优化。您需要清除旧单元格设置作为解决方案的一部分。在prepareForReuse课程中添加My_TableViewCell方法。 你这样做:

- (void) prepareForReuse
{
    [super prepareForReuse];
    // clear previous cell settings
}

附加说明:

  • 建议不要直接致电cellForRowAtIndexPath。见this thread
  • 建议您对类名使用Pascal大小写:使用MyTableViewCell代替My_TableViewCell