目标C:UITableViewDelegate方法的方法调度

时间:2016-09-29 18:52:05

标签: ios objective-c swizzling

我正在使用(JRSwizzle)在我的项目中使用方法调配。我已经实现了对#34; UIViewController"的调整。和" UIButton"。它工作正常。

但我在调试UITableViewDelegate方法时遇到了麻烦" willDisplayCell"。任何人都可以为我提供这方面的工作样本吗?

据我了解,

第1步:我们需要创建一个我们想要调整的类的类别。

示例: UIViewController + Swizzle或UIButton + Swizzle

第2步:实施+ load和swizzleMethod,如下所示

 + (void)load
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        NSError *error;
        BOOL result = [[self class] jr_swizzleMethod:@selector(viewWillAppear:) withMethod:@selector(xxx_viewWillAppear) error:&error];
        if (!result || error) {
            NSLog(@"Can't swizzle methods - %@", [error description]);
        }
    });
}

- (void)xxx_viewWillAppear
{
    [self xxx_viewWillAppear]; // this will call viewWillAppear implementation, because we have exchanged them.
    //TODO: add customer code here. This code will work for every ViewController
    NSLog(@"xxx_viewWillAppear for - %@", NSStringFromClass(self.class));
}

但是,如果我为" UITableViewController创建一个类别"并按照下面的方法进行调整,

   + (void)load
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        NSError *error;
        BOOL result = [[self class] jr_swizzleMethod:@selector(willDisplayCell:) withMethod:@selector(xxx_willDisplayCell) error:&error];
        if (!result || error) {
            NSLog(@"Can't swizzle methods - %@", [error description]);
        }
    });
}

- (void)xxx_willDisplayCell
{

}

BOOL结果总是" NO"并说"方法未找到或可用" 。这可能是因为" willDisplayCell"是" UITableViewDelegate"的委托方法。而不是" UITableViewController"

既然如此,我不能做上面的第1步。也就是说,我无法为" UITableViewDelegate"创建一个类别。 XCode甚至不允许这样做。

这就是我被困住了。完全不知道如何做到这一点。 有人可以帮忙!!

0 个答案:

没有答案