如果产品有现货,则按钮将为黑色,否则按钮背景颜色将为黄色。
但是您可以从以下的文件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()
}
}
}
我在productData属性观察器中使用checkIfProductIsInStock()
方法来检查是显示黄色按钮还是显示黑色按钮。
答案 0 :(得分:2)
单元已出队,您还需要这里
if product.isInStock {
// supply in stock logic here
}
else {
showAddToCartButton(status: true)
addToCartButton.isEnabled = false
addToCartButton.setTitle("HABIS", for: .normal)
addToCartButton.setTitleColor(.black, for: .normal)
addToCartButton.backgroundColor = AppColor.mainYellow.getUIColor()
}
答案 1 :(得分:2)
发生这种情况是由于使单元出队的行为。在这一点上,我建议覆盖prepareForReuse()
:
进行必要的清理,以准备再次使用该视图。
在您的自定义UICollectionViewCell
类中,添加:
override func prepareForReuse() {
super.prepareForReuse()
// do the reset/cleanup here...
}