#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]]