我正在使用(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甚至不允许这样做。
这就是我被困住了。完全不知道如何做到这一点。 有人可以帮忙!!