为什么一个UICollectionViewCell的状态会影响另一个?

时间:2017-11-16 10:41:38

标签: ios swift

我有一个用swift编写的应用程序,其中我有显示产品的单元格。我有一个按钮将项目添加到购物车。当产品缺货时,在UICollectionViewCell的子类中,我使用此代码禁用'添加到购物车'按钮。

  $('#selectMRPC').change(function () {
    //fetch data
    var mrpc = $(this).find('option:selected').data('mrpc');

    $('#paramBody').empty();
    for (var i = 1; i <= 10; i++) {
        var field = mrpc["field" + i];
        if (field !== undefined) {
            var parsedField = field.split('_');
            var value = parsedField[0];
            var type = parsedField[1];

            switch (type) {
                case  "S":
                    type = "text";
                    if (value === '""')
                        value = null;
                    break;
                case "B":
                    type = "checkbox";
                    break;
                case "N":
                    type = "number";
                    value = parseInt(value);
                    break;
                case "D":
                    type = "number";
                    value = parseInt(value);
                    if (value === '""')
                        value = null;
                    break;
            }
            $('#paramBody').append('<tr>');
            $('#paramBody').append('<td>' + i + '</td>');
            $('#paramBody').append('<td>' + type + '</td>');
            $('#paramBody').append('<td><input name="Fields" type="' + type + '">').val(value);
            $('#paramBody').append('</tr>');

        }
    }
});

当我滚动页面时,其他单元格中的“添加到购物车”按钮也会被隐藏,即使它们不满足条件class Product: UICollectionViewCell { //Some code here //And here if(data.stock < 0){ addToCartButton.isHidden = true; } } 。发生了什么,我该如何克服这个?

1 个答案:

答案 0 :(得分:1)

你错过的是其他情况伙伴:)

    if(data.stock < 0){
        addToCartButton.isHidden = true;
    }
    else {
        addToCartButton.isHidden = false;
    }

在collectionView中,滚动时会重复使用单元格。您应该使用prepareForReuse重置UIComponents的状态,然后才能重用它们。

override func prepareForReuse() {
    //reset all the fields of cell
    addToCartButton.isHidden = false
}

使用prepareForReuse只是最佳做法,可以解决您的问题。但问题的真正原因是缺少其他条件