これは古い質問ですが、古い質問にも答えてもらいたいので... はい、ブロックを使用する簡単な方法があります:
まず、UITableViewCell インターフェイスで public メソッドを宣言します。
@interface YourCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UIButton *button;
- (void)setDidTapButtonBlock:(void (^)(id sender))didTapButtonBlock;
@end
UITableViewCell サブクラスの実装ファイルで、copy 属性を持つプライベート プロパティを宣言します。
#import "YourCell.h"
@interface YourCell ()
@property (copy, nonatomic) void (^buttonTappedBlock)(id sender);
@end
UITableViewCell コンストラクターに UIControl のターゲットとアクションを追加し、セレクター メソッドを実装します。
- (void)awakeFromNib {
[super awakeFromNib];
[self.button addTarget:self
action:@selector(didTapButton:)
forControlEvents:UIControlEventTouchUpInside];
}
- (void)didTapButton:(id)sender {
if (buttonTappedBlock) {
buttonTappedBlock(sender);
}
}
最後に、コントローラーの tableView:cellForRowAtIndexPath: メソッドにブロック コードを実装します。
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
YourCell *cell = (YourCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier
forIndexPath:indexPath];
[cell buttonTappedBlock:^(id sender) {
NSLog(@"%@", item[@"title"]);
}];
return cell;
}
ブロックの詳細については、ブロックの操作を参照してください。