我是IOS的新手,基本上我有一个tableView,每当它有40个单元格,每个单元格都有一个步进器和一个标签。标签显示步进器的值。 tableview生成细胞很好,但问题是每当我在一个单元格中单击步进器时,其他一些随机单元也会激活它们的步进器。顺便说一下,这很快。这是单元格的代码:
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))"
}
}
以下是viewcontroller的代码:
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
}
}
答案 0 :(得分:1)
问题出在您的表视图控制器中。把价值改变的方法放在那里会更好。或者,查看您的cellForRowAtIndexPath
方法。回收时,您没有正确更新单元格。
您必须在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)
}