0

我是 IOS 新手,基本上我有一个 tableView,每当它有 40 个单元格时,每个单元格都有一个步进器和一个标签。标签显示步进器的值。表格视图可以很好地生成单元格,但问题是每当我单击一个单元格中的步进器时,其他一些随机单元格也会激活它们的步进器。顺便说一下,这很快。这是单元格的代码:

import UIKit

class StudentTableViewCell: UITableViewCell {
@IBOutlet weak var studentNameAndValue: UILabel!
@IBOutlet weak var studentValueChanger: UIStepper!

let name:String?
let value:Int?
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 stepperValueChanged(sender: AnyObject) {
    studentNameAndValue.text = "\(name): \(Int(studentValueChanger.value))"
}

}

这是视图控制器的代码:

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    tableView.delegate = self
    tableView.dataSource = self
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 40
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("studentCell") as StudentTableViewCell
    return cell
}
}
4

1 回答 1

1

问题出在您的表格视图控制器中。最好将 value-changed 方法放在那里。或者,检查您的cellForRowAtIndexPath方法。回收单元格时,您没有正确更新单元格。

您必须在 中明确设置 stepper 和 label 的值cellForRowAtIndexPath。你不能从单元格中读取这些值——它们应该在你的datasource(即表视图控制器应该知道为给定的索引路径显示什么)。

将步进处理程序连接到视图控制器中的方法,然后通过sender参数识别正确的索引路径。

@IBAction func stepperChanged(sender: UIStepper) {
    let point = sender.convertPoint(CGPointZero, toView: tableView)
    let indexPath = self.tableView.indexPathForRowAtPoint(point)!
    let myData = dataArray[indexPath.row] // or whatever your datasource
    // if you need to update the cell
    let cell = self.tableView.cellForRowAtIndexPath(indexPath)
}
于 2015-02-16T19:36:27.523 回答