У меня есть коллекция продуктов, подобных изображению ниже
если товар есть в наличии, кнопка будет черной, в противном случае цвет фона кнопки будет желтым.
но, как вы можете видеть из файла GIF здесь: http://g.recordit.co/HTEVw88Tt4.gif
первый продукт (индекс = 0) из ползунка изображения изначально имеет черную кнопку (запас по-прежнему доступен), в массиве у него есть только 1 товар, которого нет в наличии, но после прокрутки вправо, а затем обратно к первому индексу ( index = 0) затем внезапно кнопка становится желтой (как будто теперь у нее 2 товара, которых нет в наличии), даже если товар, которого нет в наличии (желтая кнопка), является только одним товаром.
как решить эту проблему?
Вот упрощенный класс продукта:
class Product {
var productID : Int = 0
var name : String = ""
var quantityFromServer: Int = 0
var lowLimit : Int = 0
var isInStock : Bool {
return quantityFromServer > lowLimit ? true : false
}
convenience init(dictionary: [String:Any]) {
self.init()
name = dictionary["products_name"] as? String ?? ""
quantityFromServer = dictionary["products_quantity"] as? Int ?? 0
lowLimit = dictionary["low_limit"] as? Int ?? 0
}
}
в контроллере вида я установил cellForRow, используя приведенный ниже код
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if collectionView == firstListProductCollectionView {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: HomeStoryBoardData.CollectionViewIdentifiers.productSliderCell.rawValue, for: indexPath) as! ListProductCell
let selectedProduct = firstProducts[indexPath.item]
cell.minimumOrderQuantity = selectedProduct.minimumOrderQuantity
cell.stepperValue = selectedProduct.quantityInCart
cell.productData = selectedProduct
cell.delegate = self
cell.collectionView = firstListProductCollectionView
cell.indexPath = indexPath
return cell
}
}
и вот код в ячейке просмотра моей коллекции
class ListProductCell: UICollectionViewCell {
@IBOutlet weak var addToCartButton: UIButton!
@IBOutlet weak var counterStackView: UIStackView!
@IBOutlet weak var textFieldStepper: UITextField!
@IBOutlet weak var decrementButton: UIButton!
@IBOutlet weak var incrementButton: UIButton!
@IBOutlet weak var loveButtonHeightConstraint: NSLayoutConstraint!
@IBOutlet weak var loveButtonWidthConstraint: NSLayoutConstraint!
var minimumOrderQuantity = 0
var stepperValue = 0
var indexPath: IndexPath?
var collectionView : UICollectionView?
var delegate: ListProductCellDelegate?
var productData : Product? {
didSet {
updateUI()
checkIfProductIsInStock()
}
}
override func awakeFromNib() {
super.awakeFromNib()
setSpecialConstraint()
}
func checkIfProductIsInStock() {
guard let product = productData else {return}
if !product.isInStock {
showAddToCartButton(status: true)
addToCartButton.isEnabled = false
addToCartButton.setTitle("HABIS", for: .normal)
addToCartButton.setTitleColor(.black, for: .normal)
addToCartButton.backgroundColor = AppColor.mainYellow.getUIColor()
}
}
}
Я использую метод checkIfProductIsInStock()
в наблюдателе свойств productData, чтобы проверить, показывать ли желтую кнопку или черную кнопку.