Ярлык пользовательской ячейки CollectionView исчезает при прокрутке - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть пользовательская ячейка для моего коллекционного вида, и одна из меток в ячейке исчезает, когда я прокручиваю вниз и снова возвращаюсь к ячейке.

Вот мой cellForItemAt:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if collectionView == productCollectionView {
if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: Identifiers.ProductCell, for: indexPath) as? ProductCell {

if cartProducts.contains(products[indexPath.item]) {
//this is the product
var product = products[indexPath.item]
//get the index from cartProducts
let index = cartProducts.firstIndex(of: product)

//Get the cartcount and update the product
let cartCount: Int = cartProducts[index!].cartCount
product.cartCount = cartCount
products[indexPath.item] = product

//now set the updated product for cell.product
cell.product = products[indexPath.item]
cell.delegate = self
return cell

} else {
cell.product = products[indexPath.item]
cell.delegate = self
return cell
}

} else 
if collectionView == categoryCollectionView{
//...this is another collection and not the collectionView that I have problem with
return cell
}

return UICollectionViewCell()
}
}

И вот что у меня есть в пользовательской ячейке для ярлыка, который исчезает, когда я прокручиваю вниз и возвращаюсь к ячейке:

class ProductCell: UICollectionViewCell {
var product: Product!
    {
        didSet {
            commonUIUpdate()
        }
    }

func commonUIUpdate() {
//set the price per amount and its unit
        if product.pricePerAmountExist == true {
            pricePerAmountLbl.isHidden = false
            if let PricePerAmount = formatter.string(from: Double(product.pricePerAmount)/100 as NSNumber) {
                let PricePerAmountVoume = Float(String(Double(product.pricePerAmountVolume)/100))?.clean ?? ""

                pricePerAmountLbl.text = "\(PricePerAmount)/\(String(describing: PricePerAmountVoume))\(product.pricePerAmountUnit)"
            }
        } else
            if product.pricePerAmountExist == false {
                pricePerAmountLbl.isHidden = true
        }
}
}

У меня есть метка pricePerAmountLbl.isHidden, установленная в true и false, когда это необходимо, но я все еще не понимаю, почему она исчезает. Когда я не устанавливаю скрытый статус для метки в пользовательской ячейке, содержимое метки повторяется во всех ячейках, что тоже неправильно.

Редактировать:

Я добавил следующее в ячейку, но все еще не удалось, проблема все еще существует

else if product.pricePerAmountExist == false {
    pricePerAmountLbl.isHidden = true
} else {
   pricePerAmountLbl.isHidden = false
}

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

С моим кодом все было в порядке! Ошибка произошла в раскадровке. Моя метка была сохранена в виде стека, а этот вид стека был сохранен в другом виде стека; когда я прокручивал и метка go скрывала, высота стека могла бы равняться нулю, и она оставалась равной нулю, даже если я показываю метку.

0 голосов
/ 26 апреля 2020

Вы не обрабатываете все случаи. Ваш ярлык остается скрытым, потому что он был скрыт в предыдущей ячейке. Возможно, вы захотите изменить свой код для покрытия пропавшего дела. Надеюсь, это поможет:

else if product.pricePerAmountExist == false {
    pricePerAmountLbl.isHidden = true
} else {
   pricePerAmountLbl.isHidden = false
   pricePerAmountLbl.text = "This case was not handled before"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...