gpt4 book ai didi

iphone - 如何动态更改我的应用程序中的 openURL 实现?

转载 作者:行者123 更新时间:2023-12-03 20:28:05 26 4
gpt4 key购买 nike

在我的应用程序中,我在 AppDelegate 中实现了一个私有(private)方法来覆盖默认的 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);
}

我还在需要自定义打开 URL 处理的类中实现了 handleURL:。然而,这阻碍了我的其他类(class),我只想在 iTunes 中简单地打开 iTunes 链接。所以我不知道如何实现的是如何使用原来的openURL:来代替customOpenURL:

最佳答案

您可以直接子类化UIApplication并覆盖openURL:。请务必更改 Info.plist 中的主类以使用 UIApplication 子类。

示例:

@interface ECApplication : UIApplication

@end

@implementation ECApplication

- (BOOL)openURL:(NSURL*)url
{

AppDelegate *MyWatcher = (AppDelegate *)[[UIApplication sharedApplication] delegate];

if (MyWatcher.currentViewController) {
[MyWatcher.currentViewController handleURL:url];
return YES;
}
return NO;
}

@end

然后,在您的 Info.plist 文件中,查找 Principle Class 键,并将值更改为 ECApplication(或您为子类命名的任何名称)。

关于iphone - 如何动态更改我的应用程序中的 openURL 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10157543/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com