0

私はUITableView内にUICollectionViewCellを持っています。私はUITableView各行の選択されたUICollectionViewCellを強調表示しようとしています。 UITableViewがリロードすると、選択したセルが強調表示されます。ここでのサンプルコードは、次のとおりです。UITableViewCellの内部にあるUICollectionViewCellの選択したインデックスパスを配列に保存するにはどうすればよいですか?

var selectedIndexes = [IndexPath]() 
var familyAModelArray : [[Child1]] = [] 
var childAModelArray : [Child1] = [] 

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 

     return familyAModelArray[collectionView.tag].count 

} 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 


     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! ChildCollectionViewCell 

     cell.nameLabel.text = childAModelArray[indexPath.row].person! // or childArray 

     cell.profilePicture.sd_setImage(with: URL(string: "\(baseUrl)\(childAModelArray[indexPath.row].image!)"), placeholderImage: #imageLiteral(resourceName: "avatar.png"), options: [.continueInBackground,.progressiveDownload]) 

    return cell 
     } 

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 

     selectedIndexes.append(indexPath) 

     let i = selectedIndexes[collectionView.tag][indexPath.row] 

} 

ここで私は、範囲外のインデックスを得た:?任意のアイデアをこれを達成するためにlet i = selectedIndexes[collectionView.tag][indexPath.row]

どのように事前に感謝します?。

+0

インデックスパスを余分な配列に保存するのではなく、データモデルにプロパティを追加して 'selected'状態を示します。 – vadian

+0

@vadian返信いただきありがとうございます。選択した状態をboolとして示すデータモデルにプロパティを追加すると、didSelectItemAt indexPath関数からどのようにアクセスできますか? – Shibili

答えて

1

あなたのセルが選択されているかどうかを確認する良い方法はのtableViewを使用すると、選択したインデックスのためのあなたの配列を確認し、背景色を変更することができます再読み込みした後、細胞

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
    let cell = collectionView.cellForItemAt(indexPath) 
    cell.backgroundColor = .red 

    // append the selected red cells to an array like such 
    selectedIndices.append(indexPath) 


} 

の背景色を変更することです。

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 


    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! ChildCollectionViewCell 

    if selectedIndices.contains(indexPath) { 
     cell.backgroundColor = .red 
     // check if the index matches a selectedIndex and change it to the selected color. 
    } 
    cell.nameLabel.text = childAModelArray[indexPath.row].person! // or childArray 

    cell.profilePicture.sd_setImage(with: URL(string: "\(baseUrl)\(childAModelArray[indexPath.row].image!)"), placeholderImage: #imageLiteral(resourceName: "avatar.png"), options: [.continueInBackground,.progressiveDownload]) 

return cell 
} 

今では再ロード後、cellForItemAt関数が再び呼び出され、選択されたインデックスパスでインデックスは再び赤であろう。

+0

しかしここでは、テーブルビュー内のコレクションビューです。 – Shibili

+1

どのセルがタップされたかを伝える方法には影響しないはずです。テーブルビューのdidSelectRow関数で選択されているtableView行を確認するだけです。 – Ali

関連する問題