私のアプリでは、アプリ内のリンクを開くためにAppDelegate
デフォルトのメソッドをオーバーライドするプライベートメソッドを実装しました。しかし、今はデフォルトの機能も必要です。openURL:
UIWebView
これが私がしたことです:
@implementation UIApplication (Private)
- (BOOL)customOpenURL:(NSURL*)url
{
AppDelegate *MyWatcher = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if (MyWatcher.currentViewController) {
[MyWatcher.currentViewController handleURL:url];
return YES;
}
return NO;
}
@end
- (void)applicationDidBecomeActive:(UIApplication *)application {
Method customOpenUrl = class_getInstanceMethod([UIApplication class], @selector(customOpenURL:));
Method openUrl = class_getInstanceMethod([UIApplication class], @selector(openURL:));
method_exchangeImplementations(openUrl, customOpenUrl);
}
handleURL:
また、カスタムのオープンURL処理が必要なクラスにも実装しました。ただし、これは、iTunesでiTunesリンクを開くだけのクラスを妨げています。だから私が達成する方法がわからないのはopenURL:
、の代わりにオリジナルを使用する方法ですcustomOpenURL:
。