我刚刚知道UITextViews的一个很棒的ios功能,即UITextview dataDetectorTypes。将文本显示为链接非常有用。
但是,我注意到一件事。当字符串是物理地址时,将打开合适的Google地图,但在不同的应用程序中。
有什么方法可以在我们的应用程序中打开该谷歌地图,而不是进入打开地图的默认iOS应用程序?这样我就可以从地图返回到我的应用程序。是否有任何委托方法可以控制这一点?现在我必须最小化应用程序(使其在后台运行)并再次打开它,这看起来不太好。
,您需要子类化UIApplication
,覆盖它的openURL:
并将应用程序类名称传递给目标的main.m
int main(...)
,如下所示:
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, @"MyApplication", NSStringFromClass([MyAppDelegate class]));
}
}
拦截 URL,您可以返回 NO
maps:
方案不启动 Maps
应用程序并以您希望的任何方式处理地址。
- 在项目中创建一个新的类子类化
UIApplication
添加以下要重写的方法:
-(BOOL)openURL:(NSURL *)url{ NSLog(@"Open %@", [url absoluteString]);
// do something if the url scheme is maps: return NO;
}
在目标的
main.m
文件中,更改默认int main(int argc, char *argv[])
实现以使其使用UIApplication
类,它应如下所示:#import //删除要编译的前导空格
#import "LXAppDelegate.h"
#import "LXapp.h"
intmain(int argc, char *argv[]){
@autoreleasepool { return UIApplicationMain(argc, argv, NSStringFromClass([MyUIApplication class]), NSStringFromClass([MyAppDelegate class])); }
}
这不适合ARC
(我从不使用它),请参阅 UIApplicationMain 文档以了解会发生什么以及应该为 ARC 支持更改的内容。
您应该使用其他解决方案来解决您的问题。
如果您使用dataDetectorTypes,则链接始终首先在内置应用程序中打开。
您可以使用按钮和自定义字符串进行操作,如下所示:
-
将您的文本推送到 UIButton 中。
-
使你的文本显示为与NSAtributedSring的链接,作为这个问题,使用UIButton而不是UITextView:
在 uitextview 中为文本添加下划线
- 在用户单击按钮时对其进行操作。
祝你好运!