Swift--UICollectionViewCellの再利用の問題

概要:最近、実際の開発で問題が発生しました

このようなインターフェイスで、左側のtableViewCellに対応する右側のcollectionViewCellのデータをクリックして表示します。青色は使用可能でクリック可能なセル、赤色はクリック不可能なセル、赤色の特定のセル表示はネットワーク要求に従って取得された使用済みのDeviceNumber配列です。 、これらの赤いセルが表示されます。サーバーから返されるDeviceNumberは、一定期間変更されません。これらはここには表示されません。

問題の説明:tableviewCellをクリックするたびに、このページに対応するcollectionViewCellは変更されないはずです。何度クリックしても、赤いセルは対応するセルですが、実際には、クリックするたびに赤いセルが増加します。 、この変更を変更する方法がわからず、何が問題なのかわかりません。最後に、友人に問題の解決を依頼しました。これは、collectionViewcellの再利用の問題であることが判明しました。以前のコードを見てください。

在UIcollectionViewCell类中
var data:String = "" {
       didSet{
            if self.isUserEnable { //isUserEnable可用的
                self.imageView.image = UIImage(named: "HardwareLock")
                self.textLabel.text = "Device \(self.data)".toLocalize()
            }else{
                self.imageView.image = UIImage(named: "CashierStoreCardCashOutLock")
                self.contentBtn.isUserInteractionEnabled = false
                self.contentBtn.backgroundColor = UIColor.red
                self.textLabel.text = "Device \(self.data)".toLocalize()
            }
      }
    }

変更後のコード:

var data:String = "" {
       didSet{
            if self.isUserEnable { //isUserEnable可用的
                self.imageView.image = UIImage(named: "HardwareLock")
                self.contentBtn.backgroundColor = UIColor.blue //上面下面唯独多出来的一行代码
                self.textLabel.text = "Device \(self.data)".toLocalize()
            }else{
                self.imageView.image = UIImage(named: "CashierStoreCardCashOutLock")
                self.contentBtn.isUserInteractionEnabled = false
                self.contentBtn.backgroundColor = UIColor.red
                self.textLabel.text = "Device \(self.data)".toLocalize()
            }
      }
    }

分析:比較コードを読んだ後、コードself.contentBtn.backgroundColor = UIColor.blueをもう1行追加し、セルのsubViews–contentBtnに色の割り当てを追加したことがわかります。これは、セルの再利用の問題であるはずです。簡単に言えば、同じセルを使用する場合、セルまたはその子コントロールで特定の属性を変更する必要があるかどうかに関係なく、変換の両方の場合でこの属性も変更する必要があります。特定の状況でこの属性の割り当てが不足している場合、何らかの不均衡が発生し、セルとそのサブコントロールが別の属性の変更とバランスして色の変更を切り替えることができなくなります。属性が正常に切り替えられない場合でも、上記の属性などの古い属性値が保持されます。赤になった後、他のプロパティに値を割り当てた後、サーバーから返されたさまざまな値に従って青い色が切り替えられたことは明らかですが、上記の新しいコード行がないと、セルとそのサブコントロールは赤のままです。もう一度クリックすると、使用されるセルは、色を変更せずに以前の赤のままであるため、クリックするたびに不要な多くの無関係な色が生成されます。

おすすめ

転載: blog.csdn.net/SoftwareDoger/article/details/102570861