UITextview dataDetectorTypeAddress - 在不同应用程序中打开的地图



我刚刚知道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 应用程序并以您希望的任何方式处理地址。


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

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

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

    }

  3. 在目标的main.m文件中,更改默认int main(int argc, char *argv[])实现以使其使用UIApplication类,它应如下所示:

    #import //删除要编译的前导空格

    #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:

在 uitextview 中为文本添加下划线

  • 在用户单击按钮时对其进行操作。

祝你好运!

相关内容

最新更新