ios - 不需要/未单击的对象自行增加

标签 ios arrays swift uitableview imageview

我有一个问题,我正在使用 for 打印 json 数据并使用数组列表,但是当我单击第 0 个数组时,第 5 个和第 10 个自身增量,仅显示发生变化,而不是实际数量......

enter image description here

enter image description here

这是示例,我单击了鸡蛋按钮,然后向下滚动直到找到第 5 个数组也显示“1”数量,当我滚动到第 10 个数组时出现同样的问题,我认为每第 5 个数组都会出现错误..但是其余的(第一个、第二个、第三个等没有得到错误,正如你所看到的,第一个数组=面包仍然是空白的)

这是你们可能会有所帮助的代码

import UIKit
struct Nutritionmenu
{
    static var data:Array<String> = Array <String>()
}
class CustomCell: UITableViewCell {
    @IBOutlet weak var leftlabel: UILabel!
    @IBOutlet weak var myImageView: UIImageView!
    @IBOutlet weak var rightlabel: UILabel!
    @IBOutlet weak var qtytext: UITextField!
    @IBOutlet weak var decrease: UIImageView!
    @IBOutlet weak var imageheader: UIImageView!
    var value = 0
    var check:Bool = false
    var idx = 0
    override func awakeFromNib() {
        super.awakeFromNib()
        self.myImageView.userInteractionEnabled = true
        self.decrease.userInteractionEnabled = true
        // Initialization code
    }

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }
    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
        qtytext.resignFirstResponder()
        self.endEditing(true)

    }
    override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {

        let touch: UITouch? = touches.first as? UITouch
        if(touch?.view == myImageView)
        {
            value += 1
            qtytext.text = String(value)
            //println(qtytext.text)
        }
        if(touch?.view == decrease)
        {
            if(value >= 1)
            {
                value -= 1;

            }
            qtytext.text = String(value)
            let myquantity = qtytext.text
            NSUserDefaults.standardUserDefaults().setObject(myquantity, forKey: "SavedStringKey")
            NSUserDefaults.standardUserDefaults().synchronize()
            let stringKey = NSUserDefaults.standardUserDefaults()
            qtytext.text = stringKey.stringForKey("SavedStringKey")

        }
        var data = Nutritiondata(type: leftlabel.text!, amount: qtytext.text.toInt()!)
        var temp:Nutritiondata
        temp = data
        var idx = 0
        if(temp.amount-1 > 0) {
            temp.amount -= 1
        }
        data = Nutritiondata(type: leftlabel.text!, amount: qtytext.text.toInt()!)
        var json = JSONSerializer.toJson(data)
        var tempJson = JSONSerializer.toJson(temp)
        for(var i = 0; i < Nutritionmenu.data.count; i++){
            if(Nutritionmenu.data[i] == tempJson){
                self.check = true
                self.idx = i
            }
        }
        if(!self.check) {
           Nutritionmenu.data.append(json)
        }
        else{
            Nutritionmenu.data[self.idx] = json
        }
    }
    func setCell(leftlabeltext: String, rightlabeltext: String, imagename: String)
    {
        self.leftlabel.text = leftlabeltext
        self.rightlabel.text = rightlabeltext
        self.myImageView.image = UIImage(named: imagename)

    }



}


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



        let cell: CustomCell = tableView.dequeueReusableCellWithIdentifier("cell") as! CustomCell
        let menu = arrayOfMenu[indexPath.row]
        cell.setCell(menu.type, rightlabeltext: menu.unit, imagename: menu.image)
        var data = Nutritiondata(type: menu.type, amount: String(cell.value ).toInt()!)
        var json = JSONSerializer.toJson(data)
        JSONNutrisi.jsondata = json
        return cell
    }

这是我的菜单功能

class Nutritiondata
{
    var type = "type"
    var amount = 0
    //var date = "Date"
    init (type: String, amount: Int)
    {
        self.type = type
        self.amount = amount
        //self.date = date
    }
}

我刚刚发现问题是表没有创建新数组而是重用它,所以当我单击第0个数组时,第5个数组也增加,第1个数组第6个也增加等等。但是如何修复它?

最佳答案

选择时,您将更改单元格的值。因此,当 TableView 重用它时,它会显示内存中的可用单元格。然后它就具有您增加的值。您应该将“cell.value”保留在与 arrayOfMenu 索引有关系的数组中。单元格不应用于保存数据。

关于ios - 不需要/未单击的对象自行增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32002438/

相关文章:

ios - -[CCTextureAtlas drawNumberOfQuads :fromIndex:] 556 中的 OpenGL 错误 0x0500

javascript - 套接字在foreach中挂起多个get调用

ios - CocoaPods 和 Swift 3.0

ios - 为 IPAD Air 获取不正确的屏幕分辨率

ios - Swift 3 中的动态对象创建

c - 删除数组中的重复项

ios - 如何在 Swift 中对字典类型的数组应用 removeAtIndex?

ios - "Failure to deallocate CLLocationManager on the same runloop as its creation may result in a crash"

ios - Swift with Core Data 在我获取的字符串上得到一个 "Optional("")"?

ios - UIPickerView 无法在子 UIView 中工作