вот мой упрощенный код в контроллере моего представления
class WishListVC: UIViewController {
@IBOutlet weak var wishListCollectionView: UICollectionView!
private var products = [Product]()
private var selectedProduct : Product?
override func viewDidLoad() {
super.viewDidLoad()
}
//MARK: - cell Delegate
extension WishListVC : ListProductCellDelegate {
func addToCartButtonDidTapped(at selectedIndexPath: IndexPath, collectionView: UICollectionView) {
guard let userOrder = userOrder else {return}
let selectedProduct = products[selectedIndexPath.item]
Order.addProductToOrderRealmDatabase(userOrder: userOrder, selectedProduct: selectedProduct)
wishListCollectionView.reloadData()
updateBadgeOnCartTabBar()
}
func stepperButtonDidTapped(at selectedIndexPath: IndexPath, stepperValue: Int, collectionView: UICollectionView) {
guard let userOrder = userOrder else {return}
let selectedProduct = products[selectedIndexPath.item]
if stepperValue > 0 {
Product.changeProductQuantityInRealmDatabase(selectedProduct: selectedProduct, quantity: stepperValue)
} else {
Order.removeProductFromOrderRealmDatabase(userOrder: userOrder, selectedProduct: selectedProduct)
Product.changeProductQuantityInRealmDatabase(selectedProduct: selectedProduct, quantity: 0)
}
wishListCollectionView.reloadData()
updateBadgeOnCartTabBar()
}
}
//MARK: - Collection View Data Source
extension WishListVC : UICollectionViewDataSource, UICollectionViewDelegate {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return products.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: WishListStoryboardData.CollectionViewIdentifiers.productSliderCell.rawValue, for: indexPath) as? ListProductCell else { return UICollectionViewCell()}
cell.productData = products[indexPath.item]
cell.delegate = self
cell.collectionView = wishListCollectionView
return cell
}
}
, а вот код для моей ячейки представления коллекции:
protocol ListProductCellDelegate {
func addToCartButtonDidTapped(at selectedIndexPath: IndexPath, collectionView : UICollectionView)
func stepperButtonDidTapped( at selectedIndexPath: IndexPath, stepperValue: Int, collectionView : UICollectionView)
}
class ListProductCell: UICollectionViewCell {
@IBOutlet weak var productImageViewAspectRatio: NSLayoutConstraint!
@IBOutlet weak var addToCartButton: UIButton!
@IBOutlet weak var stepper: GMStepper!
var collectionView : UICollectionView?
var delegate: ListProductCellDelegate?
var productData : Product? {
didSet {
updateUI()
}
}
@IBAction func addToCartButtonDidPressed(_ sender: UIButton) {
guard let collectionView = collectionView else {return}
guard let selectedIndexPath = collectionView.indexPathForView(view: sender) else {return}
self.delegate?.addToCartButtonDidTapped(at: selectedIndexPath, collectionView: collectionView)
}
@IBAction func stepperDidTapped(_ sender: GMStepper) {
guard let collectionView = self.collectionView else {return}
guard let selectedIndexPath = collectionView.indexPathForView(view: sender) else {return}
self.delegate?.stepperButtonDidTapped(at: selectedIndexPath, stepperValue: Int(sender.value), collectionView: collectionView)
}
private func updateUI() {
guard let product = productData else {return}
stepper.value = Double(product.quantity)
setLikeButton(product: product)
setCartAndStepperButton()
}
private func setCartAndStepperButton() {
guard let selectedProduct = productData else {return}
func showStepperButton(status: Bool) {
// to decide whether to show stepper or add to cart button.
stepper.isHidden = !status
stepper.isEnabled = status
addToCartButton.isHidden = status
addToCartButton.isEnabled = !status
}
if selectedProduct.quantity == 0 {
showStepperButton(status: false)
} else {
showStepperButton(status: true)
}
}
}
Я не понимаю, почему после нажатияв первый раз после исчезновения «Добавить в корзину» степпер исчезнет, представление коллекции исчезнет.
У меня нет всего кода collectionView.isHidden
, но я не знаю, почему мое представление коллекцииисчезают, как файл .gif ниже
http://g.recordit.co/NAEc36MbrM.gif
, но если шагер уже показан с некоторым значением шагера больше 1, то мой вид коллекции исчезнет, как на рисунке ниже
http://recordit.co/SLdqf1ztFZ.gif
минимальное значение шага установлено равным 1.
Если я изменю данные перезагрузки представления сбора wishListCollectionView.reloadData()
в приведенном выше методе stepperButtonDidTapped
напросто перезагрузите данные в определенную ячейку только с помощью wishListCollectionView.reloadItems(at: [selectedIndexPath])
проблема будет решена, но значение степпера, кажется, будет обновляться немного медленнее, и это выглядит запаздывающим.
Я не знаю, как отследить последнеелиния, которая будет выполнена, так что это делает мою коллекциювид исчезает.
, и если я перезагружаю данные в главном потоке, используя:
DispatchQueue.main.async {
self.wishListCollectionView.reloadData()
}
, это не приведет к исчезновению представления сбора, но если я отредактирую индекс ячейки 4, тобудет влиять на индекс ячейки 1, например, на gif: http://g.recordit.co/6802BJDdtx.gif
Я изменяю число в пятой ячейке, но оно автоматически изменит вторую ячейку.