Ios 目标C:UITableViewDelegate方法的方法切换

Ios 目标C:UITableViewDelegate方法的方法切换,ios,objective-c,swizzling,Ios,Objective C,Swizzling,我正在使用JRSwizzle(JRSwizzle)在我的项目中使用方法swizzling。我已经为“UIViewController”和“UIButton”实现了swizzling。它很好用 但我在快速切换UITableViewDelegate方法“willDisplayCell”时遇到问题。有人能给我一个这个的工作样本吗 据我所知 第1步:我们需要创建一个我们想要swizzle的类的类别 示例:UIViewController+Swizzle或UIButton+Swizzle 第2步:执行+加

我正在使用JRSwizzle(JRSwizzle)在我的项目中使用方法swizzling。我已经为“UIViewController”和“UIButton”实现了swizzling。它很好用

但我在快速切换UITableViewDelegate方法“willDisplayCell”时遇到问题。有人能给我一个这个的工作样本吗

据我所知

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

示例:UIViewController+Swizzle或UIButton+Swizzle

第2步:执行+加载和Swizzle方法,如下所示

 + (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”创建一个类别,并执行如下方法swizzle

   + (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甚至不允许这样

这就是我被困住的原因。完全不知道怎么做。
有人能帮忙吗

方法是
tableView:willDisplayCell:forRowAtIndexPath:
,但是为什么要使用swizzling而不是继承呢?谢谢Josh!这是一个已经存在的项目,并且已经使用了许多TableViewController。我认为不接触现有代码是安全的。我尝试了这个解决方案,我的意思是你提供的方法,但我不确定我创建的类别文件应该是“UITableViewController”还是“UITablewViewDelegate”?第一种方法是“找不到方法”,而第二种方法,如我所说,甚至不允许创建UITablewViewDelegated的类别。方法是
tableView:willDisplayCell:forRowAtIndexPath:
,但为什么要使用swizzling而不是继承?谢谢Josh!这是一个已经存在的项目,并且已经使用了许多TableViewController。我认为不接触现有代码是安全的。我尝试了这个解决方案,我的意思是你提供的方法,但我不确定我创建的类别文件应该是“UITableViewController”还是“UITablewViewDelegate”?第一种方法表示“找不到方法”,第二种方法如我所说甚至不允许创建UITablewVIewDelegate的类别