UITableView在一个单元格中更改文本,在其他更改中也包含文本

时间:2015-06-21 12:50:38

标签: ios swift uitableview

我有一个带有自定义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
    }

更改的单元格始终在屏幕外。有时值甚至会在两个单元格之间跳跃!

1 个答案:

答案 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.

并为单元格设置正确的默认值。