2017-08-09 5 views
0

私のプロジェクトには、各セルに追加されたアイテムの数を追加して、UIBarButtonItemに合計を表示するUICollectionViewがあります。しかし、私がビューをスクロールすると、数字は変化し続けます。この問題はコレクションビューとテーブルビューがセルを再利用するという事実に関連していると私は理解していますが、私は多くの研究を行っていますが、問題を解決することはできません。 "prepareForUse()"をオーバーライドしても役に立ちませんでした。私はまだ初心者なので、もし私が素朴なら私を許してください。前もって感謝します。UICollectionViewをスクロールすると値が更新され続けます

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell = trayCell.dequeueReusableCell(withReuseIdentifier: "trayCell", for: indexPath) as! TrayItemCollectionViewCell 

     //initializing labels 

     if let quantity = arrayOfOrders[indexPath.row]["quantity"] as? Int{ 
      totalQuantity += quantity 
      trayButton.title = "\(totalQuantity)" 
     } 

    return cell 
} 
+0

あなたはバーボタンのタイトルで全コレクションビュー内の項目の合計数を表示しようとしています? – jegadeesh

+0

@Bader Yusuf Serhan変更や繰り返しに違いはありますか? –

+0

コレクションビューのコードをさらに表示してください。 – 3stud1ant3

答えて

0

collectionView(_:cellForItemAt:)は、セルが提示されるたびに呼び出されます。あなたのための理想的な流れは、次のコードで、あなたが(潜在的にviewDidLoad:に)あなたのarrayOfOrdersを取得した直後にそのタイトルを更新することになります。

/// Get array of quantities 
let quantityArray = arrayOfOrders.flatMap { $0["quantity"] as? Int } 

/// Get sum 
let totalQuantity = quantityArray.reduce(0, +) 

/// Update button title 
trayButton.title = "\(totalQuantity)" 
-1

forループを使用するtableViewをリロードするたびにarrayOfOrdersからすべての値を追加します。これは唯一の方法です。

0
for (index, element) in arrayOfOrders.enumerate() 
{ 
    if let quantity = element["quantity"] as? Int{ 
      totalQuantity += quantity 
     } 
    trayButton.title = "\(totalQuantity)" 
} 

このようにします。 (私はこれをチェックし、だから、必要に応じていくつかの調整をしませんでした。)あなたはcollectionView(_:cellForItemAt:)方法外trayButtonタイトルアップデートのためにあなたのコードを呼び出す必要が

+0

私の問題は実際にコレクションビューのスクロール –

関連する問題