3

UITableView のセル内にカスタム ドロップダウン メニューを作成し、このメニューをセル コンテンツ ビューのサブビューとして追加しています。

セル内のメニューをクリックすると、ビューが拡大されてすべてのメニュー項目が表示されます。これで、メニュー ビューが tableView とすべてのセルの上に表示されます。

そのため、カスタム ビュー内の項目を選択すると、TouchesBegan は、拡大したすべてのビューではなく、メニューを呼び出す UITableView セルの上にあるビューの一部でのみトリガーされます。

別のセルの上にある部分でビューに触れると、TouchesBegan は、すべてのセルの上のビューではなく、テーブル ビューのセルでトリガーされます。

なにか提案を?

4

2 に答える 2

0

ビューは通常、ビューまたはビューの境界外に描画された部分のタッチ イベントには応答しません。この問題を解決するには、いくつかのオプションが考えられます。

  • ドロップダウン メニューが表示されているときにセルを拡大してメニュー全体に合わせますが、デザインによっては視覚効果に悪影響を与える可能性があります。

  • セル ビューの代わりにコントローラーにメニューを追加します。このルートを取得した場合はUIScrollViewDelegate、テーブル ビューのイベントを使用して、ユーザーがテーブルをスクロールしたときにメニューの位置を変更できます。メニューが最後のセルに表示され、常に下方向に描画されるとコントローラーの境界をオーバードローする可能性がある場合を考慮することを忘れないでください。

  • メニュー ビューとそのスーパービューの両方でオーバーライドhitTest:withEvent:して、通常の境界外でもイベントに応答することを OS に通知します。pointInside:withEvent

于 2013-05-07T14:15:52.823 に答える