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