0

カスタムセルを持つテーブルビューコントローラーがあります。これらのセルでは、セルごとにボタンを追加しました。私が望むのは、そのボタンを押すと、didSelectRowAtIndexPathから取得したビューとは異なる、そのセルに関する詳細情報を含む新しいビューが表示されることです。

難しい質問であることはわかっています。ボタンがinterfacebuilderで何らかのアクションを持っていることを見てきました(おそらくタッチダウン)が、どのコードにどのようにリンクするのですか。そのイベントを処理するコードはどこで宣言すればよいですか?

回答なしで他のフォーラムに投稿しましたが、これがうまくいくことを願っています。

ありがとう。ジャイアン

4

1 に答える 1

0

おそらく 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];
}
于 2010-03-16T04:15:57.280 に答える