我有一个带有自定义UITableViewCell的UITableView设置,它有一个标签和一个文本字段。每当我更改文本字段的文本时,随机其他单元格的文本字段中的文本也会发生变化。
public class ChangePriceTableViewCell: UITableViewCell {
@IBOutlet weak var priceField: UITextField!
@IBOutlet weak var productName: UILabel!
@IBAction func changePrice(sender: UITextField) {
println(sender.text)
}
public override func layoutSubviews(){
var toolbar = UIToolbar.new()
toolbar.frame.size.height = 35
var doneButton:UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Done, target: self, action: "hideKeyboard")
var space:UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil)
var items = [AnyObject]()
items.append(space)
items.append(doneButton)
toolbar.items = items
priceField.inputAccessoryView = toolbar
}
public func configure(product: String) {
self.productName.text = product
}
func hideKeyboard() {
println("Test")
priceField.resignFirstResponder()
}
}
数据源:
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 12//self.products.keys.count
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
//println(self.products[self.products.keys[section]])
return 2//self.products[self.products.keys[section]]!.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("change") as! ChangePriceTableViewCell
//var prods = self.products[self.products.keys[indexPath.section]]
//var productName = prods?[indexPath.row] as! String
//cell.configure(productName)
cell.configure("Test")
return cell
}
override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return "Test"//self.products.keys[section].uppercaseString
}
更改的单元格始终在屏幕外。有时值甚至会在两个单元格之间跳跃!
答案 0 :(得分:2)
您的细胞被重复使用。请在ChangePriceTableViewCell中实现此方法:
func prepareForReuse() // if the cell is reusable (has a reuse identifier), this is called just before the cell is returned from the table view method dequeueReusableCellWithIdentifier:. If you override, you MUST call super.
并为单元格设置正确的默认值。