我刚刚了解到 UITextViews 的一个很棒的 ios 功能,即UITextview dataDetectorTypes。将文本显示为链接非常有用。
然而,我注意到一件事。当字符串是物理地址时,Google Map 会打开,这是合适的,但在不同的应用程序中。
有什么方法可以在我们的应用程序中打开该谷歌地图,而不是进入打开地图的默认 iOS 应用程序?这样我就可以从地图返回我的应用程序。有没有可以控制这个的委托方法?现在我必须最小化应用程序(使其在后台运行)并再次打开它看起来不太好。
我刚刚了解到 UITextViews 的一个很棒的 ios 功能,即UITextview dataDetectorTypes。将文本显示为链接非常有用。
然而,我注意到一件事。当字符串是物理地址时,Google Map 会打开,这是合适的,但在不同的应用程序中。
有什么方法可以在我们的应用程序中打开该谷歌地图,而不是进入打开地图的默认 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 < UIKit/UIKit.h> //去掉前导空格进行编译
#import "LXAppDelegate.h"
#import "LXapp.h"
int main(int argc, char *argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, NSStringFromClass([MyUIApplication class]), NSStringFromClass([MyAppDelegate class]));
}
}
那不是为了ARC
(我从不使用它),请参阅UIApplicationMain文档以了解发生了什么以及应该为 ARC 支持更改哪些内容。
您应该使用另一种解决方案来解决您的问题。
如果您使用 dataDetectorTypes,链接总是首先在内置应用程序中打开。
您可以使用按钮和自定义字符串进行操作,如下所示:
将您的文本推送到 UIButton 中。
使您的文本显示为与 NSAtributedSring 的链接作为这个问题,使用 UIButton 而不是 UITextView:
祝你好运!