UIViewからUITableViewのカスタムセルを作るとボタンタップイベントが取れない
現象
UITableVIewのカスタムセルにボタンを置いて、タップ用の処理を書いたがタップイベントを検知できない。
原因
ボタンの上のレイヤーに、UITableViewCellContentView
というビューが描画されており、このビューに邪魔されてタップイベントが検知できていなかったため。
根本原因
カスタムセルのxibファイルを、UITableViewCell
ではなく、 UIView
を使って作成していたため。
UITableViewCell
で作ったxibは、UITableViewCellContentView
の上に自分の配置したパーツが描画されています。
ちなみに、xibファイルの新規作成すると、デフォルトで UIView
が置いてあるというXCodeのおせっかい機能のがほんとの原因かもしれません。
対策
カスタムセルを作る際には、xibファイルのデフォルトで置いてある UIView
を消して、UITableViewCell
を置くと良いです。
または、新規ファイルを作成する際に、クラスファイルから作成して、 Cocoa Touch Class
を選択して、次の画面で Also create XIB file
にチェックを入れると、勝手に UITableViewCell
を配置したxibファイルを生成してくれます。
AutoLayoutに慣れてる人には当たり前なのかもしれないですが、ちょっとわかりにくいなーと思いました。