2013-03-20 5 views
5

私はストーリーボードのプロトタイプセルにカスタムアクセサリビュー(UIButton)を持っています。そのボタンをクリックすると、タップされたアクセサリボタンのデリゲートメソッドは呼び出されません。私が標準の開示ボタンを使用する場合、それはちょうどいいと呼ばれています。私はどこかでフックを紛失していると思っています。誰がどこを知っていますか?UITableViewプロトタイプセルでカスタムアクセサリビューが起動しない

+0

私はUITableViewCellサブクラスを使用しており、インターフェイスビルダーでセルを設計しています。私はテーブルビューのコントローラからそれをやっていないよ。私はそのサブクラスから呼び出す必要があります。 – smokingoyster

答えて

1

カスタムテーブルセルのプロトコルを使用してこの問題を回避しました。

CustomAccessoryTableCellDelegate.h

@protocol CustomAccessoryTableCellDelegate <NSObject> 

    @required 
    - (void) accessoryButtonTappedForCell: (UITableViewCell *) cell; 

@end 

CustomAccessoryViewTableCell.h

@interface CustomAccessoryViewTableCell : UITableViewCell 

     /** The custom accessory delegate. */ 
     @property (nonatomic, weak) id<CustomAccessoryTableCellDelegate> delegate; 

@end 

CustomAccessoryViewTableCell.m

- (IBAction) buttonAction:(id)sender{ 

    if ([self.delegate respondsToSelector:@selector(accessoryButtonTappedForCell:)]) { 
     [self.delegate accessoryButtonTappedForCell:self]; 
    } 

} 

内部テーブルビューコントローラ

付属のデリゲートメソッドについての
2

推測1: あなたは本当にあなたがアクセサリが行く場所に配置されUIButtonを持っている「カスタムアクセサリビュー」を持っていません。それは本当に付属品ではないので、デリゲートのアクセサリのタップボタンは起動しません。

推測2: あなたは本当のアクセサリビューを持っていますが、あなたがユーザーとの対話を食べるが、アクションを発射されていないことでUIButtonを持っているので、それは「タップ」イベントを取得したことがないです。その場合は、単純にUIViewを追加してみてください。

それ以外は、もっと情報が必要です。

+0

イメージビューを使ってみましたが、違いはありませんでした。ボタンはUITableViewCellのaccessoryViewプロパティに接続されます。これをプログラムでUITableViewCellサブクラスから呼び出す方法はありませんか? – smokingoyster

+0

'cellForRowAtIndexPath'では、セルを取得した後、' accessoryView'プロパティにビューへの参照があるか、 'nil'であるかどうかを確認します。 IBで正しく設定されていれば、存在するはずです。 – DBD

+0

ボタン/ビュー/私がそこにあるものを表示します。それ自身の定義されたアクセサリビュータイプのタップイベントのみを処理するようです。テーブルセルからプログラムで実行するのは良い方法ではないようです。私はカスタムプロトコルを使用して終了しました。私はこれを答えに入れます。 – smokingoyster

2

リンゴのドキュメントは言う

デリゲートは、通常、選択された行に関連する新しいビューを表示することにより、開示ボタン(アクセサリビュー)上のタップに応答します。このメソッドは、indexPathの行に対してアクセサリビューが設定されている場合は呼び出されません。

したがって、カスタムアクセサリビューでは呼び出されません。それは標準的な動作です。

関連する問題