• ベストアンサー

UITableViewCell タッチイベント

こんにちは iOSのアプリ作成中です。 UIViewのサブビューとしてUITableViewCellを置いているのですが、UITableViewCellからのtouchesBeganが呼ばれません。 サブニューにUITableViewCellではなくて、UIViewを使った場合は取得できます。 UITableViewCellのuserInteractionEnabledは設定してあります。 どんな原因が考えられますでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

> UIViewのサブビューとしてUITableViewCellを置いているのですが、UITableViewCellからのtouchesBeganが呼ばれません。 どこに実装したtouchesBeganが呼ばれないのか書かれていませんが、 UIViewControllerに実装したtouchesBeganが呼ばれないということ でしょうか? UITableViewCellは本来UITableView内のセルとして動作し、 セルをタップしたらそれをUITableViewに伝え UITableViewのdidSelectRowAtIndexPathを発生させる 機能を持っていますから、タッチイベントを何もせず 次のレスポンダーチェーンに渡す(最終的にUIViewControllerに伝える) ようなことはしないはずです。 つまり、UIViewControllerに実装したtouchesBeganが呼ばれないのは仕様です。 UIButtonもボタンをタップしたらタッチイベントはUIButton内で処理され、 UIViewControllerのtouchesBeganは呼ばれないのと同じです。 なぜUITableViewCellをUITableView内で使用するのではなく、 通常のUIviewのサブビューで使いたいのかわかりませんが、 どうしてもUITableViewCellのタッチイベントを拾いたいなら UITableViewCellのサブクラスを作り、そこでtouchesBeganを オーバーライドすればタッチイベントを拾えるはずです。 が、その前に本当にそこでUITableViewCellを使う必要があるのか 設計を見直すことをお勧めします。

titokani
質問者

お礼

回答ありがとうございます。 もともとandroid版を私が作っていて、退職者が作っていたiOS版を引き継ぐ羽目になったのですが、ソースしかないので、なぜそうなっているのかは不明です。 なんとなく、もともとUIViewで作っていたものを「>」マークが出したくて、急遽UITableViewCellに変更したのはいいけれど、touchesBeganが呼ばれていないことに気がつかなかったのかなという感じです。 仕様ということがわかってすっきりしました。ありがとうございます。

関連するQ&A

専門家に質問してみよう