問題はこれです:
多くの tableView を持つ既存の大きなアプリ全体で didSelectRowAtIndexPath の分析を取得できる必要があります。
これについて最初に考えたのは、didSelectRowAtIndexPath: でメソッドのスウィズリングを行うことですが、元の didSelectRowAtIndexPath 実装でアクセスされたものに応じて、「認識されないセレクターがインスタンスに送信されました」というメッセージでアプリがクラッシュします。
UIViewController カテゴリでこれを達成しようとする方法は次のとおりです。
#import "UIViewController+Swizzle.h"
@implementation UIViewController (Swizzle)
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPathSwizzled:(NSIndexPath *)indexPath {
NSLog(@"Log something here");
[self tableView:tableView didSelectRowAtIndexPathSwizzled:indexPath];
}
+ (void) initialize {
BOOL conformsToTableViewDelegate = class_conformsToProtocol(self, @protocol(UITableViewDelegate));
if(conformsToTableViewDelegate) {
Method method1 = class_getInstanceMethod(self, @selector(tableView:didSelectRowAtIndexPath:));
Method method2 = class_getInstanceMethod(self, @selector(tableView:didSelectRowAtIndexPathSwizzled:));
method_exchangeImplementations(method1, method2);
}
}
@end
これは達成できますか?もしそうなら、私は何を間違っていますか?
ありがとう!