iphone - UITextview dataDetectorTypeAddress - 在不同应用程序中打开的 map

标签 iphone ios nsstring uitextview datadetectortypes

我刚刚了解到 UITextViews 的一个很棒的 ios 功能,即 UITextview dataDetectorTypes .将文本显示为链接非常有用。

不过,我注意到一件事。当字符串是一个物理地址时,谷歌地图被打开,这是合适的,但在不同的应用程序中。

有什么方法可以在我们的应用程序中打开该谷歌地图,而不是进入打开 map 的默认 iOS 应用程序?这样我就可以从 map 返回我的应用程序。有没有可以控制这个的委托(delegate)方法?现在我必须最小化应用程序(使其在后台运行)并再次打开它看起来不太好。

最佳答案

很简单,你需要继承UIApplication ,覆盖它的 openURL:并将应用程序类名传递给目标的 main.m int main(...)像这样:

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, @"MyApplication", NSStringFromClass([MyAppDelegate class]));
    }
}

拦截您可以返回的网址NO对于 maps:计划不启动 Maps应用程序并以您希望的任何方式处理地址。


  1. 在项目中创建一个新类子类UIApplication
  2. 添加以下要覆盖的方法:

    -(BOOL)openURL:(NSURL *)url { NSLog(@"打开 %@", [url absoluteString]);

    // do something if the url scheme is maps:
    return NO;
    

  3. 在目标的 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 支持更改哪些内容。

关于iphone - UITextview dataDetectorTypeAddress - 在不同应用程序中打开的 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10780545/

相关文章:

iOS:NSString 丢失 URL,显示 (null)

iphone - 我在哪里可以从 Apple 下载 "media stream segmenter"

iphone - iOS:应用程序图标角标(Badge)不会消失

ios - Dropbox API 上传文件

ios - 调用通知时容器 View Controller 变量设置为默认值

ios - 锁定 iPhone 时的 Objective-C URL 请求

c++ - 从 C++ std::string& 获取 unichar * 以在 Objective-C++ 中创建非空 NSString

iphone - 创建新文件而不是复制文件

iphone - 在4.0之前的iOS中,是否存在线程安全的方法来创建PNG图像?

iphone - NSMutableUrlRequest 吃加号