2012-12-07 28 views
13

UITableViewがあり、各セルにUICollectionViewが含まれています。UICollectionViewがUITableVIewでネストされている場合は選択できません

は、私は、しかし、私はUICollectionViewUICollectionViewCellを選択することができない、縦にUITableViewをスクロールして水平にネストされたUICollectionViewをスクロールすることができます。

UITableViewでは選択が無効になっており、UICcollectionViewでは有効になっています(デフォルト状態)。

UICollectionView'scollectionView:didSelectItemAtIndexPath:は、決して呼び出されません。

+0

UICollectionViewDelegateは設定されていますか? – skladek

+0

コレクションビューのセルは、(調光のような)タップ応答を提示しますか?おそらく 'UITableView'のセルがコレクションビューのタップをキャンセルしています。 –

+3

あなたはこのJohnの修正を見つけましたか? –

答えて

-1

私の最初の本能は、二つのビュー間のジェスチャ認識が

より具体的に競合し得ることで、タップのためのUITableViewのGRは、受信タッチ

0

Iができた方法からUICollectionViewのGRを防止することができますこれは、手動でタップを扱うのではなく、呼び出されませんdidSelectRowAtIndexPathに依存するセルにタップジェスチャー認識を追加することでした解決する:

スウィフト

let tapRecognizer = UITapGestureRecognizer(target: self, action: "cellTapped:") 
tapRecognizer.numberOfTapsRequired = 1 
cell.addGestureRecognizer(tapRecognizer) 

のObjective-C

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(cellTapped:)]; 
tapRecognizer.numberOfTapsRequired = 1; 
[cell addGestureRecognizer:tapRecognizer]; 

あなたは今cellTapped:方法でタップされたセルを扱うことができ、あなたはtapRecognizer.view経由でタップされたセルへの参照を取得することができます。

-1

最初に必要なデータソースと代理人を指定してください。 次に、特定の数のテーブルビューセルでコレクションビューを使用している場合、プロトタイプセルに直接入れることができます。あなたのセルが適切な制限(幅)を持っていることを確認してください

-3

これはまったく問題ではありません!カスタムジェスチャー認識プログラムは必要ありません。テーブルビューの選択を無効にする必要はありません。

に確認してください。

  1. ストーリーボードやコードでセットアップあなたのテーブルビューとそのデータソースを設定し、tableviewcellが対応collectionviewへの参照を取得し、その(collectionviews)を設定デキュー後cellforrowatindexpathで
  2. を委任データソースと
  3. がtableviewsとcollectionviewsデリゲートdidselectメソッドを実装し、それが動作確認するために彼らの呼び出しをログアウト委任

ちょっとしたサンプルプロジェクトを実装してから、その答えを書いて問題がないことを確認しました。まだそれがあなたのために働かないなら、私はそれをアップロードすることができます!

幸運!

0

私はちょうどこれが働いているので、私はあなたと私の解決策を共有するだろうと思った。

UITableViewおよびネストされたUICollectionViewのために必要な代表者とデータソースを設定した後、あなたがこの

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    ... 
    [tableViewCell bringSubviewToFront:tableViewCell.yourCollectionView]; 
    return cell; 
} 

のようなあなたのUICollectionView最初の選択ビューはこれがデリゲート

を経由して選択可能です UICollectionView最初の事を行います作ることができます
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath; 

ビューの他の部分はUITableViewデリゲート

を使用して選択します
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; 

希望します。

-1

tableViewdelaysContentTouchesを無効にし、コレクションビューのdelegateが正しく設定されていることを確認してください。

関連する問題