iOS处理自定义类中的didSelectRowAtIndexPath

时间:2015-03-01 17:15:30

标签: ios objective-c swift delegates event-handling

我已经看到了如何为自定义类中的事件设置处理程序的方法。像这样:

@implementation CustomClassWithTable {
    void (^_cellHandler)(Cell *cell);
}

...

- (void)setCellHandler:(void (^)(Cell *))handler
{
    _cellHandler = handler;
}

...

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    ... 
    if (_cellHandler) {
        _cellHandler(cell);
    }
}

然后在控制器中它只需要设置cellHandler就可以了。我喜欢。首先这个aproach(模式)的名称是什么?第二,我怎么能在swift中做到这一点?它是最好的方法吗?假设我的自定义类(菜单)中有表,我希望能够在我的视图控制器中选择单元格。我应该使用这个方法还是其他东西(例如委托模式)?

1 个答案:

答案 0 :(得分:1)

您在上面的代码中所做的是使用目标C块进行委派。 Swift有一个类似的特征叫做闭包。因为此块具有在运行时下注的能力,所以您还可以使用策略模式在选择表行时委派不同的行为。

var cellHandler : ((cell: Cell) -> Void)?

if let callback = cellHandler {
    callback(cell)
}