0

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

然而,我注意到一件事。当字符串是物理地址时,Google Map 会打开,这是合适的,但在不同的应用程序中。

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

4

2 回答 2

2

很简单,你需要子类化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 < 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 支持更改哪些内容。

于 2012-05-28T07:29:09.983 回答
0

您应该使用另一种解决方案来解决您的问题。

如果您使用 dataDetectorTypes,链接总是首先在内置应用程序中打开。

您可以使用按钮和自定义字符串进行操作,如下所示:

  • 将您的文本推送到 UIButton 中。

  • 使您的文本显示为与 NSAtributedSring 的链接作为这个问题,使用 UIButton 而不是 UITextView:

uitextview 中的文本下划线

  • 当用户单击它时为您的按钮执行操作。

祝你好运!

于 2012-05-28T07:30:50.807 回答