我想知道是否有办法将实例方法添加到类的“实例”中。
场景是我正在使用 EKEventEditViewController,并且在这个类中有一个 UITableView,有一个名为“EKEventEditor”(非公共 AFAIK)的委托(UITableViewDelegate)。它没有实现 tableView:willDisplayCell:forRowAtIndexPath: 方法,我试图用它来禁用某些单元格。
所以我试图向实例添加一个方法,但我在 Obj-C 运行时中只能找到 class_addMethod 调用,它将方法添加到类而不是实例。由于“EKEventEditor”是私有的,我不能只是扩展它并自己添加该方法。
有什么提示吗?
这是我正在使用的代码,我试图添加的函数(willDisplayCell_)没有被调用。
- (void)navigationController:(UINavigationController *)navigationController
willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
if ([navigationController isKindOfClass:[EKEventEditViewController class]]) {
UITableViewController *rootController = (UITableViewController*)[(UINavigationController*)navigationController visibleViewController];
if ([rootController isKindOfClass:[UITableViewController class]]) {
UITableView *eventTableView = (UITableView*)[rootController view];
class_addMethod([eventTableView.delegate class],
@selector(tableView:willDisplayCell:forRowAtIndexPath:),
(IMP)willDisplayCell_, "v@:@@@");
}}}
void willDisplayCell_(id self, SEL cmd, UITableView *tableView, UITableViewCell *cell, NSIndexPath *indexPath) {
NSLog(@"CALLED?");
}