#author("2016-11-09T18:53:39+09:00","default:wikiwriter","wikiwriter")
#author("2016-11-10T12:55:31+09:00","default:wikiwriter","wikiwriter")
[[UIKit/テーブル]]

&tag(UIKit/テーブル/セル内に置かれたボタンのイベントを処理する);
*目次 [#xbb79af7]
#contents
*関連ページ [#a953c595]
*参考情報 [#sc52bf16]

*概要 [#e2924636]
-UITableViewCellを継承したカスタムセルを作成し、その中にUIButtonが設置されている。
-ビューコントローラーと関係ない処理ならばセル単体で完結できるので、カスタムセルクラスにイベントハンドラを作成すればよい。
-しかし普通はビューコントローラーと関係した処理を書かないといけないので、ビューコントローラー側にイベントを伝搬させる方法を考える必要がある。

*方法1: delegateを使う [#w02b1eb9]
-[[DynamicなTableViewのCellのボタンアクションをViewControllerに設定する - Qiita:http://qiita.com/kichikuchi/items/0e1b1d6b29293ee70c1d]]にあるような方法。
-UITableViewCell側でタップイベントを一回受けとって、delegateとして登録されたViewControllerにイベントを渡す。
-必要なデータはconfigureメソッドなどで受け取るか、UIButtonの親をたどってUITableViewCellを取得し、そこからIndexPathを取得し…というふうにつなげる。

*方法2: Interface Builderで接続する [#k655931b]
--[[DynamicなTableViewのCellのボタンアクションをViewControllerに設定する - Qiita:http://qiita.com/kichikuchi/items/0e1b1d6b29293ee70c1d]]にはInterface Builderで接続する方法も掲載されている。

*方法3: addTargetで直接関連づけ [#s8f023a5]
-[[カスタムセルのUIButtonのNSIndexPathを取得する -でじうぃき:http://onlineconsultant.jp/pukiwiki/?%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%82%BB%E3%83%AB%E3%81%AEUIButton%E3%81%AENSIndexPath%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B]]にような方法。

-UIEventをアクションで受け取るのようにして、その座標を変換することができる。
-またはボタンだけを受け取り、その座標を変換することができる。[[iphone - How to know the UITableview row number - Stack Overflow:http://stackoverflow.com/questions/9274494/how-to-know-the-uitableview-row-number]]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS