2013-08-28 28 views
6

カスタムテーブルビューセルがあり、カスタムクラスを作成しました。どのようにしてセルからテーブルビューコントローラへの参照を取得できますか?カスタムテーブルビューからテーブルビューコントローラへの参照を取得する方法セルクラス

私はこのカスタムtableviewセルクラスを持っています。この中に私はタップイベントに接続されたボタンを持っています。タップするとイベントはうまくいきますが、テーブルビューコントローラーを保持するために、テーブルビューの上にアクションシートを表示できます。

@interface MTPurchasedCartItemCell : UITableViewCell 

- (IBAction)onShareTap:(id)sender; 

@end 
+0

さらにコードやコードを追加する必要があります。あなたは何をしようとしているのですか?あなたは何をした?ポインタの意味は?何のためにポインタが必要ですか? – CaptJak

+0

私はいくつかのコードを追加し、私の質問を更新しました。ありがとう。基本的に私はテーブルビューコントローラにアクセスしたいので、テーブルビューのセルの中にボタンがあるのでアクションシートを表示できます。 –

+0

ボタンのターゲットは、コントローラに設定する必要があります。これは、addTargetのtarget引数としてselfを渡して設定します。action:forControlEvents: – rdelmar

答えて

3

私がこれを行う方法は、ブロックイベントハンドラを使用することです。こののような何かを、あなたのコントローラクラスで

- (IBAction)onShareTap:(id)sender { 
    if (self.tapHandler) { 
     tapHandler(sender); 
    } 
} 

そして最後に:

@property (nonatomic, copy) void (^tapHandler)(id sender); 

そして、あなたがこれを行うことができます実装ファイル内:あなたのMTPurchasedCartItemCellクラスではそのようにヘッダファイル内のプロパティを追加しますあなたのcellForRowAtIndexPath::私はボタンイベントを使用して、カスタムセルからテーブル参照を取得する非常によく似た何かをやった

... 
cell.tapHandler = ^(id sender) { 
    // do something 
} 
... 
+1

ブッダがシドハルタに警告するので、賢明であることに注意してください。 [using target-action](http://stackoverflow.com/a/19608500/242933)は同じことを行う簡単な方法です。 – ma11hew28

-1

コード:

-(IBAction)onShareTap:(UIButton *)sender { // i've used a button as input.. 

UIButton *senderButton = (UIButton *)sender; 
UITableViewCell *buttonCell = (UITableViewCell *)senderButton.superview.superview.superview; 
UITableView* table = (UITableView *)[buttonCell superview]; 

NSLog(@"Table: %@", table); 
} 
+0

ビュー階層の詳細はプライベートで、異なるバージョンのiOSで変更される可能性があるため、 'superview'を使用してセルの1つからテーブルビューへの参照を取得することは危険です。また、@EncorePTLは、テーブルビューではなくテーブルビューコントローラを取得する方法についても質問しています。 – ma11hew28

2

また、カスタムセルにボタンの公共@propertyを追加することを検討することがあります。カスタムセルクラスのヘッダファイルに次の行を追加し、それを行うために

@property (weak, nonatomic) IBOutlet UIButton *myButton; 

あなたがInterface Builderでボタンを作成している場合です。あなたは、コード内のボタンを作成している場合は、代わりにこの行を追加したい:次に

@property (nonatomic) UIButton *myButton; 

を初期化したり、テーブルビューコントローラからセルを構成するときに、あなたは今myButtonへの参照を持っているし、追加することができますあなたのテーブルビューコントローラをターゲットにしたアクション。

次に、アクションメソッドで、ボタンからセルを取得できます。 Objective-C: How to generate one unique NSInteger from two NSIntegers?への答えはどのように説明します。

関連する問題