2016-08-12 12 views
1

私はUICollectionViewを持っています。そのセルの内部にはUICollectionViewがあります。別のセルからセルの選択を検出する

enter image description here

collectionViewを含むセルがタップされたときに、私は(didSelectItemAtIndexPathを介して)検出することができます。しかし、セル内のcollectionViewのセルが(個々の太陽のアイコンで示されているように)タップされているときは検出できません。

すべてのユーザー対話が有効です。そして、私はcollectionView as described hereのhitTestを上書きしようとしました。

更新:私はこれをもう一度簡単なテストプロジェクトで試してみましたが、うまくいきました。しかし、私の現在のプロジェクトで何らかの理由で最も内側にあるcollectionView(太陽のアイコン付き)がビューデバッガに表示されません。

enter image description here

お知らせ私はcollectionViewの背景が青作られ、その細胞はピンク。実行中のアプリに表示されても、ビューのデバッグ時に表示されません。

+1

UICollectionViewを含むUICollectionViewCellのデリゲートをselfに設定しましたか?つまり、UICollectionViewCellをサブクラス化し、そのサブクラス内にUICollectionViewを設定し、そのUICollectionViewのデリゲートをUICollectionViewCellに設定する必要があります。また、ヒットテストをするのも面倒ではありません。非常にまれに、UIResonderチェーンが大規模な介入を必要とするケースがあります。このケースでは、委任を正しく設定するよりも遠くに行く必要があります。 – Loxx

+0

@Loxxはい、内側のcollectionViewの代理人は、それが存在するセルに設定されています – vikzilla

+1

ええと、私は古いプロジェクトをプルして、私がこれをどのように回避したかを見てみましょう。私はすぐにここに投稿します – Loxx

答えて

0

私のセルのXIBを使用してからストーリーボードの通常のセルを使用するように変更すると、この問題は発生しませんでした。

0

私はこれを前にしていますが、説明するのは少し難しいでしょう。 短い答えはTapGesturesです。

だから私はストーリーボードを描いたtableViewを持っていました。コレクションビューはプログラムによって追加されました。

TableView cellforRowでは、私はUITableViewCellサブクラスを呼び出しました。私はdelegateとしてrootViewを渡しました。これはCollectionViewClassを呼び出しました。これは、セルの実際の項目が描画され、コレクションビューに追加される場所です。この時点で私は根絶者を持っています。各項目について、tapGestureを追加します。

let tap = UITapGestureRecognizer(target: self, action: #selector(viewTapped)) 

ので、各項目は、今で内部のタップジェスチャーを持っています。今私の見解では、私はセルがタップされているとrootviewを呼び出すことができます描いていた。

func viewTapped() { 
    tapDelegate?.milestoneTapped(passID) //tapDelegate = RootView 
} 

私はこのことができます願っています。

+0

可能であれば、回避策ではなくUICollectionViewデリゲートメソッドを使用したいと考えています。私が最終的に組み込み機能を使用できない場合は、これを試してみます – vikzilla

関連する問題