objective-c - Objective-C - 如何实现自定义回调方法但强制执行特定参数?

标签 objective-c ios oop callback objective-c-blocks

在我的应用程序中,我有一个自定义的 UITableViewCell 子类,按下时会弹出一个选择器。从现在开始,我将此类称为 PickerCell。 我在同一个 UITableView 中使用了 PickerCell 的多个实例。

我不希望单元格响应选择器中一行的选择,因为它不是一个好的 MVC。 相反,我希望 ViewController 为单元格提供一个回调,该回调将在选择行时调用。

最明显的方法是创建一个类似 PickerCellDelegate 的协议(protocol), View Controller 将自己传递给每个单元格。

我对这种方法的问题是,因为我有几个 PickerCells,我在 ViewController 中实现的协议(protocol)必须区分每个单元格:

-(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 单元格提供一个 block 以在选择时执行,因为我知道可以使用特定参数定义 block 。此外,无需传递“目标”对象。

那么我该怎么做呢?

谢谢!

最佳答案

这是 block 回调的使用方法

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

并在选择器单元格创建后分配回调 block

PickerCell *cell = // create a picker cell
cell.callback = ^(NSInteger row, NSInteger component) {
    // inside callback
};

关于objective-c - Objective-C - 如何实现自定义回调方法但强制执行特定参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9903509/

相关文章:

objective-c - 比较 int 对象和 number 的值不起作用?

ios - 如何在 XCode 界面生成器中删除退出转场?

javascript - 从 UIWebView Javascript 监听 Objective-C 中的通知

javascript - 区分应用程序访问的 Wifi 连接

ios - 以编程方式禁用 UIView 的安全区域布局指南

objective-c - 将 PolygonShape 设置为六边形形状

ios - 在 UIButton 下添加 UIScrollView 后失去点击识别

Python:静态变量(或者,class.some_var 和 inst.some_var 之间的区别)

c++ - C++中的继承语法

iphone - ScrollView 的 subview 大小为零,即使加载的文本不是零