在我的应用程序中,我有一个自定义的UITableViewCell子类,在按下时会弹出一个选择器。从现在开始,我将此课程称为PickerCell.
我在同一个UITableView
中使用了几个PickerCell实例。
我不希望单元格响应选择器中的行选择,因为它不是一个好的MVC。 相反,我希望ViewController为单元格提供一个在选择行时调用的回调。
最明显的方法是创建一个像PickerCellDelegate
这样的协议,视图控制器会将自己传递给每个单元格。
我对这种方法的问题在于,由于我有几个PickerCell,我在ViewController中对协议的实现必须区分每个单元格:
-(void) pickerCell : (PickerCell *) sender
didSelectRow : (NSInteger) row
inComponent : (NSInteger) component
{
if (sender == X)
// Something
else if (sender == Y)
// Something else...
// etc...
}
我讨厌这种编码风格......
相反,我真的想要一种允许ViewController给它自己的回调的机制。
我可以允许PickerCell接受“onRowSelectedSelector
”,但是如何确保此选择器采用我想要的格式? (参数数量最重要)
更好的是,我想给Picker单元格一个块来执行选择,因为我知道可以使用特定参数定义块。此外,无需传递“目标”对象。
那我该怎么做呢?
谢谢!
答案 0 :(得分:34)
这是如何使用块回调
typedef void(^PickerCallback)(NSInteger row, NSInteger component);
@interface PickerCell
@property (nonatomic, copy) PickerCallback callback;
@end
@implementation PickerCell
@synthesize callback;
- (void)whatever {
// when you want to call the callback block
if (self.callback) {
self.callback(row, component);
}
}
@end
并在创建选择器单元后指定回调块
PickerCell *cell = // create a picker cell
cell.callback = ^(NSInteger row, NSInteger component) {
// inside callback
};