2017-07-13 10 views
1

コレクションビューのセルとその中の含まれているテーブルビューの間のリムボーに陥っているアプリで作業しています。コレクションビューセル内のテーブルビューセルから別のコレクションビューセルへのデータ転送

私の最初のコレクションビューセルには、テーブルビューセルがあるテーブルビューが含まれています。 各テーブルビューセルには保存されたデータが含まれており、1つのセルを選択することで2つのことが発生します。

  1. コレクションビューセルプロパティヘッダ(この場合、タイトル、日付に)テーブルビューセルデータは新しいコレクションビューセルに渡さなければならない現在の+1
  2. にインデックスを変更しなければなりません。

もう1つの側面は、テーブルビューがコンテナビュークラスに格納されていることです。私はこの問題かどうかはわかりませんが、変数を1つの余分なレイヤーに渡すことはできません。

これまでのところ、これは私が

self -> ContainerView -> collectionCell[0] -> CollectionView -> collectionCell[1] -> tableView -> header? 

Symbolic setup for my problem

答えて

1

あなたのテーブルビューは、親コレクションビューセルに依存しています。つまり、コレクションビューセルの参照をインスタンス化のテーブルビューに渡す必要があります。私はプロトコルを作るだろう。

protocol myTableViewCellDelegate { 
    func updateMyCollectionViewCell 
} 

extension myCollectionViewCell: myTableViewCellDelegate { 
    func updateMyCollectionViewCell { 
    // update whatever you need to here 
    } 
} 

extension myCollectionTableViewDelegate: UITableViewDelegate { 
    // ... 
    func collectionView(_ collectionView: UICollectionView, 
         willDisplay cell: UICollectionViewCell, 
         forItemAt indexPath: IndexPath) { 
    // instantiate table view 
    // pass self to tableview *as weak reference* 
    myTableView.customDelegate = self 
    } 
    //... 
} 

extension myTableViewDelegate: UITableViewDelegate { 
    //... 
    func tableView(_ tableView: UITableView, 
       didSelectRowAt indexPath: IndexPath) { 
    // instantiate table view cell 
    // assuming you're not using custom cell class 
    tableCell.updateMyCollectionViewCell() 

    // if you are using custom cell class then the tableViewDelegate 
    // will need to pass collectionView reference on to the cells 
    } 
} 

希望します。

+1

ありがとうございました! どのようにすばらしい、明確でよく構造化された答え。 これがテンダーだったら、私はあなたのようなスーパーを与えるだろう;) –

-1

にこれを渡すにはどうすればよい私はあなたにブロックを使用することができると思う私は動けなく

tableViewDidselectCode

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    let header = LoadHeaderView() 
    let cell = tableView.dequeueReusableCell(forIndexPath: indexPath) as SavedTableViewCell 
    header.titleString = cell.taskLabel.text! 
    header.descriptionString = cell.clientLabel.text! 
} 

です情報やその他の行動を送信する。 https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithBlocks/WorkingwithBlocks.html

関連する問題