5

問題はこれです:

多くの 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

これは達成できますか?もしそうなら、私は何を間違っていますか?

ありがとう!

4

1 に答える 1