おそらく UIButton をサブクラス化して、NSIndexPath のインスタンスを持つようにします。そうすれば、UITableViewCell 内の個々の UIButton は、テーブル ビュー内のどこにあるかを「知る」ことができるため、ボタンを押すと、NSIndexPath を取得して新しいビューをプッシュするメソッドを呼び出すことができます-didSelectRowAtIndexPath:
。代わりに他のビューを使用してください(おそらく、のようなわかりやすいメソッド名を付けてください-didPressButtonAtIndexPath:
)。
Interface Builder を使用してこれを行う代わりに、UIButton サブクラス自体にメソッドを追加して、View Controller のメソッドを呼び出す必要があります。次に、各 UIButton に対して、UIControl メソッドを使用できます-addTarget:action:forControlEvents:
。コントローラーのメソッドを呼び出す独自のメソッドを UIButton に呼び出させます。ソリューションは次のようになります。
// MyButton.h
@interface MyButton : UIButton {
NSIndexPath *myIndexPath;
MyViewController *viewController;
}
- (void)didPressButton;
@end
// MyViewController.h
@interface MyViewController { }
- (void)didPressButtonAtIndexPath:(NSIndexPath *)indexPath;
@end
次に、セルを作成するときに、ボタンごとに次の呼び出しを追加します。
[button addTarget:button
action:@selector(didPressButton)
forControlEvents:UIControlEventTouchDown];
最後に、次の-didPressButton
ように実装します。
- (void)didPressButton {
[controller didPressButtonAtIndexPath:myIndexPath];
}