私のアプリでは、自分のアプリ内のリンクをUIWebView
内で開くために、私のAppDelegate
にプライベートメソッドを実装して、デフォルトのopenURL:
メソッドをオーバーライドしました。しかし、今ではデフォルトの機能が必要です。ここでアプリケーションでopenURLの実装を動的に変更するにはどうすればよいですか?
は、私がやったことだ:
@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);
}
私もカスタムオープンURLの処理が必要とされた私のクラスでhandleURL:
を実施しました。しかし、これは私がiTunesで簡単にiTunesリンクを開いてみたいという私の他のクラスを妨げている。だから達成する方法が分からないのは、customOpenURL:
の代わりに元のopenURL:
を使用する方法です。
なぜ、 'openURL'の代わりに' customOpenURL'を呼び出せないのですか?その後、上書きする必要はありません。 – Krizz
customURLはUIWebViewでリンクを開きますが、1つのリンクではUIwebViewで開き、もう1つのリンクではiTunesで開きたいとします。 – Ashutosh
しかし、私はあなたが 'UIWebView'でオープンしたいリンクに対して' customOpenURL'を呼び出すことができず、iTunesで外部から起動したいリンクに対して 'openURL'をなぜ呼び出せないのでしょうか? – Krizz