2016-12-14 17 views
0

CollectionViewの問題がありますが、私はa videoに以下の問題を示しています。私が1つのセルをクリックすると、それは変な形で動きます。CollectionViewセルを選択したときに移動する

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
    selectedFilter = indexPath.row 

    if filters[indexPath.row] != "Todo" { 
     filteredNews = news.filter { $0.category == filters[indexPath.row] } 
    } else { 
     filteredNews = news 
    } 
    tableView.reloadData() 
    collectionView.reloadData() 

} 

マイセルが動いている、(理由だけではなく、最後のセルは、知りません): はここに私のコードです。

私はそれがcollectionView.loadData()に関連している可能性があると思うが、私はセルを選択するとon this Videoを見ることができる緑のバーを更新するためにそれを行う必要があります。

どうすれば移動できますか?誰かが同様の問題を抱えていましたか?

答えて

0

最後に解決します!私はcollectionView.reloadData()を削除し、現在選択されている項目と古い選択項目を変更するdidSelectItemAt内の色を変更するコードを追加しました(どの項目が古い選択項目かを確認する変数を作成しました)。

誰か興味を持っている場合は、ここに私のコードは次のとおりです。

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
    let oldSelectedFilter = selectedFilter 
    if selectedFilter != indexPath.row { 
     let oldIndexPath = IndexPath(item: oldSelectedFilter, section: 0) 
     selectedFilter = indexPath.row 

     if filters[indexPath.row] != "Todo" { 
      filteredNews = news.filter { $0.category == filters[indexPath.row] } 
     } else { 
      filteredNews = news 
     } 
     if let cell = collectionView.cellForItem(at: indexPath) as? FiltersCollectionViewCell { 
      cell.selectedView.backgroundColor = MainColor 
     } 
     if let cell = collectionView.cellForItem(at: oldIndexPath) as? FiltersCollectionViewCell { 
      cell.selectedView.backgroundColor = UIColor(red:0.31, green:0.33, blue:0.35, alpha:1.0) 
     } 

     tableView.reloadData() 
    } 
} 
1

collectionView didSelectItemAtの実行中にtableViewを再読み込みしたことに気付きました。そのtableViewがあなたのコレクションビューのスーパービューであれば、あなたはこの異常な振る舞いをしています。

それがなかったら、私は3つのソリューションを提供することができます

  1. This libraryを表示したいエフェクトを作成することができますビューコントローラのサブクラスを持っています。
  2. collectionViewの内部にないUIView/UIImageViewを手動で作成しますが、collectionViewのdidSelectItemAtデリゲートメソッドの実行中にその位置を更新する代わりに、視覚的にセルをオーバーライドします。これは計算が必要ですが、collectionViewを再ロードする必要はありません。
  3. collectionViewのreloadItem(at:IndexPath)メソッドを使用して、影響を受けた2つのセルのみをリロードすることができます。

テーブル/コレクションビューを再読み込みすると、現在表示されているセルは変更されません。ただし、各セルのコンテンツには影響があります。

関連する問題