如何在 iOS 6 中启动具有特定地址的 iOS 地图应用程序?

2024-03-02

我有一个应用程序,允许用户启动地图应用程序(Google 或 Apple)来查看地址。

我曾经这样做过:

Address *address = [self.person.addresses objectAtIndex:0]; 

NSString *addressString = [NSString stringWithFormat:@"%@ %@ %@ %@, %@ %@",
                                   address.line1 == nil ? @"" : address.line1,
                                   address.line2 == nil ? @"" : address.line2,
                                   address.line3 == nil ? @"" : address.line3,
                                   address.city == nil ? @"" : address.city,
                                   address.state == nil ? @"" : address.state,
                                   address.zip == nil ? @"" : address.zip];

NSString *mapsURL = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@", [addressString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:mapsURL]];

但为了支持 iOS 6,我将其更改为:

Address *address = [self.person.addresses objectAtIndex:0]; 

        NSString *addressString = [NSString stringWithFormat:@"%@ %@ %@ %@, %@ %@",
                                   address.line1 == nil ? @"" : address.line1,
                                   address.line2 == nil ? @"" : address.line2,
                                   address.line3 == nil ? @"" : address.line3,
                                   address.city == nil ? @"" : address.city,
                                   address.state == nil ? @"" : address.state,
                                   address.zip == nil ? @"" : address.zip];

        // Check for iOS 6
        Class mapItemClass = [MKMapItem class];
        if (mapItemClass && [mapItemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)])
        {
            /*
            // Create an MKMapItem to pass to the Maps app
            MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:nil
                                                           addressDictionary:nil];

            MKMapItem *mapItem = [[MKMapItem alloc] initWithPlacemark:placemark];
            [mapItem openInMapsWithLaunchOptions:nil];
            */

            // I want something like this:
            MKMapItem *mapItem = [[MKMapItem alloc] initWithAddressQuery:addressString];
            [mapItem openInMapsWithLaunchOptions:nil];
        }
        else
        {
            NSString *mapsURL = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@", [addressString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:mapsURL]];

        }

基本上,使用原始地址(没有ABPersonRef或其他)我需要在 Apple 地图中打开该位置。谷歌过去在这方面做得很好。

我尝试过简单的切换maps.google.com to maps.apple.com但在 iOS 5 中,它会打开 Google 地图网络应用程序——我不想要这个!有一个非常好的原生应用程序。


找到了答案here https://stackoverflow.com/questions/12504294/programmatically-open-maps-app-in-ios-6。它是通过使用CLGeocoder class:

// Check for iOS 6
    Class mapItemClass = [MKMapItem class];
    if (mapItemClass && [mapItemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)])
    {
        CLGeocoder *geocoder = [[CLGeocoder alloc] init];
        [geocoder geocodeAddressString:addressString
                     completionHandler:^(NSArray *placemarks, NSError *error) {

                         // Convert the CLPlacemark to an MKPlacemark
                         // Note: There's no error checking for a failed geocode
                         CLPlacemark *geocodedPlacemark = [placemarks objectAtIndex:0];
                         MKPlacemark *placemark = [[MKPlacemark alloc]
                                                   initWithCoordinate:geocodedPlacemark.location.coordinate
                                                   addressDictionary:geocodedPlacemark.addressDictionary];

                         // Create a map item for the geocoded address to pass to Maps app
                         MKMapItem *mapItem = [[MKMapItem alloc] initWithPlacemark:placemark];
                         [mapItem setName:geocodedPlacemark.name];

                         // Set the directions mode to "Driving"
                         // Can use MKLaunchOptionsDirectionsModeWalking instead
                         NSDictionary *launchOptions = @{MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving};

                         // Get the "Current User Location" MKMapItem
                         MKMapItem *currentLocationMapItem = [MKMapItem mapItemForCurrentLocation];

                         // Pass the current location and destination map items to the Maps app
                         // Set the direction mode in the launchOptions dictionary
                         [MKMapItem openMapsWithItems:@[currentLocationMapItem, mapItem] launchOptions:launchOptions];

                     }];
    }
    //iOS 4/5:
    else
    {
        NSString *mapsURL = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@", [addressString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
        ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 iOS 6 中启动具有特定地址的 iOS 地图应用程序? 的相关文章

  • 从应用程序内发送电子邮件中的图像和文本

    如何从我的应用程序内通过电子邮件发送图像和文本 表格数据形式 请大家帮忙并提出建议 谢谢 void sendMailWithImage UIImage image if MFMailComposeViewController canSend
  • 在 Swift UI 中为文本添加动画

    怎么可能动画化Text or TextField来自 Swiftui 的意见 我所说的动画是指 当文本发生变化时 它会 计数 例如 给定一些标签 如何创建一个动画 当我将标签文本设置为 100 时 它会从 0 上升到 100 我知道这在 U
  • UITextfield 键盘只有字母,没有数字,没有大写字母,没有空格键?

    我希望 UITextfield 的键盘只有 a z 没有数字 没有特殊字符 并且没有大写字母 基本上我想要一个只有字母的键盘 我已经能够禁用该空间了 有人知道如何禁用数字 特殊字符和大写字母吗 解决这些问题中的任何一个都很棒 对所有角色执行
  • 如何打开/关闭 iPhone 相机闪光灯 swift 2?

    我正在寻找如何打开 关闭 iPhone 的相机闪光灯 我发现了这个 IBAction func didTouchFlashButton sender AnyObject let avDevice AVCaptureDevice defaul
  • 外设 writeValue: forCharacteristic: 类型: 返回 null 错误和值

    我正在使用苹果编写的以下代码 https developer apple com library mac samplecode HeartRateMonitor Listings HeartRateMonitor HeartRateMoni
  • 如何使用文档提供者扩展?

    我正在学习更多有关 ios 扩展的知识 例如 今日扩展 照片编辑扩展 动作延伸 自定义键盘扩展 在所有这些中 我在学习上没有困难 但最近我尝试学习 文档提供程序扩展 令我惊讶的是 在互联网上没有找到任何相关教程谈论如何使用它 与其他人一样一
  • ios7.1:推送通知徽章更新问题

    我已经设置了Push Notification在我当前的项目之一中 我已遵循推送通知所需的所有说明 在 tag ios7 中工作正常 但在7 1当我的应用程序处于后台模式时 我在徽章更新中遇到问题 我的代码如下 BOOL applicati
  • FB SDK 3.0 我是否需要扩展访问令牌还是自动的?

    基于http developers facebook com roadmap offline access removal http developers facebook com roadmap offline access remova
  • Swift 无法从上到下呈现视图控制器

    在我的应用程序中 我必须从上到下呈现屏幕 我尝试了下面的代码 它给出了相同的正常呈现风格 let screen self storyboard instantiateViewController withIdentifier Screen1
  • iOS:GMail API - 通过电子邮件发送附件

    我能够成功发送没有附件的电子邮件 但是 当我尝试使用 GTLUploadParamaters 上传附件时 出现 501 错误 我尝试添加照片库中附件的 NSData 以及仅发送图像的 URL 在这两种情况下我都得到了同样的错误 Create
  • 如何在 Swift 中退出“DispatchQueue.main.asyncAfter”

    我想在调用 deinit 时退出 DispatchQueue main asyncAfter 子视图 swift DispatchQueue main asyncAfter deadline now 5 0 self doSomething
  • 切换到 Xcode 7 后,应用程序大小从 9 MB 增长到 60 MB,有解决办法吗?

    我一直在回顾 Git 历史来寻找文件大小发生巨大变化的原因 但我能找到的唯一真正原因是从 Xcode 6 切换到 Xcode 7 GM 我发现这些是文件大小贡献最大的 10 个 ipa创建自Archive操作在一个Release构建配置 u
  • 自动布局+基于总行数的动态表高度约束

    首先 这与动态单元格的高度无关 所以不要把它搞混了 我有一个场景 我创建了三张卡 详细信息卡 显示位置的具体详细信息 图表卡 根据选择显示不同的图表 更多详细信息卡 卡显示更多详细信息 以下是上述卡片的屏幕 查看以上屏幕的层次结构 Cont
  • 获取UIButton的UITableViewCell?

    我正在尝试使用UIButton 它位于自定义的UITableViewCell类称为GFHomeCell The GFHomeCell has a postID属性 我想在准备继续时发送该属性 我设置了一个在按下按钮时运行的方法 但是 在按下
  • 我可以在滚动时固定表格的 tableHeaderView 位置吗?

    我有一个表视图 并在其 tableHeaderView 上附加了一个 UISegmentedControl 如何使 tableHeaderView 固定 以便即使在滚动表视图时也始终可以在同一位置查看 UISegmentedControl
  • Modal UIViewController 在 iPad 上总是全屏显示。为什么?

    我试图在 iPad 上创建一个简单的模式对话框 无论是小设置 UIModalPresentationFormSheet 还是大设置 UIModalPresentationPageSheet 但无论我做什么 它们都会全屏显示 带有标题栏 模态
  • Angular/ HTML5 到 iOS WKWebView 通信

    我们正在尝试看看发送信号的最佳选择是什么To iOS WKWebView fromAngular 6 HTML5 项目 任何示例都会很棒 我们想要做的是 我们在 Angular 网页上有一个按钮 单击该按钮应该通知 iOS 执行某些操作 我
  • iOS 上的三字母国家代码

    我知道您可以在 iOS 上获取所有国家 地区的两个字母的国家 地区代码 但是有没有办法获得三个字母的国家代码 So from http en wikipedia org wiki ISO 3166 1 alpha 2 http en wik
  • iOS 上邮件到达时收到通知吗?

    当邮件到达标准邮件应用程序时 有没有办法让应用程序收到通知 更准确地说 我想编写一个应用程序 它能够从标准邮件应用程序读取传入的电子邮件 其中包含自定义 txt 格式的新联系人或事件 然后 应用程序应将此新联系人 事件添加到 ipad 反之
  • 如何在 Safari 和 Native App 之间共享上下文?

    我有需要通过 Safari 设置一些上下文 上下文标记 然后从本机 iOS 应用程序读取该上下文 这样做的最佳实践是什么 到目前为止的一些想法 在 HTML 5 数据库中设置上下文 但我不确定这是否有效 因为该数据库可能只能从 Safari

随机推荐

  • 标签云大小问题

    我正在使用代码来显示基于百分比值的标签云 第一次将标签添加到我的数据库时 它看起来很大 然后相对于其他标签缩小 添加的次数越多 这是代码 private void BindTagCloud int pro id Convert ToInt3
  • PDO 插入重复密钥更新

    发布此问题后MySQL 更新或插入或死亡查询 https stackoverflow com questions 6074557 mysql update or insert or die query我已更改为使用 PDO 但在使用重复密钥
  • Q 学习代理的学习率

    学习率如何影响收敛速度和收敛本身的问题 如果学习率恒定 Q函数是否会收敛到最优值 或者学习率必须衰减以保证收敛 学习率表示解决问题所采取的步骤的大小 It 不宜太大一个数字 因为它可能会在最小值周围持续振荡 并且它不宜太小否则 将需要大量时
  • 参考Qt中的Sender对象

    我遇到了一些麻烦 我对 Qt 和 C 相当陌生 可以说是在试水 我将尝试如下描述我的问题 我有一条线编辑QLineEdit此编辑有一个如下所示的连接 connect my lineedit SIGNAL textEdited QString
  • php xpath获取属性等于的节点

    我有一个 xml 如何获取节点levelone有一个名为myatt其值为a然后访问它的myval 我尝试参考其他帖子来使其工作 但它似乎不起作用我的 xpath 有什么问题 this gt myXmlObj gt xpath levelon
  • 翻转视图 iPhone

    请考虑下面的代码 并告诉我我做错了什么 我想在两个 UIView 之间切换 不知何故 当我从初始视图翻转时 我只是得到翻转的视图 没有动画 当我向后翻转时 动画显示得很好 翻转是由视图本身上的按钮触发的 IBAction showMoreI
  • [UIAlertView 显示] 如何工作?

    我想做一些类似于 UIAlertView 的事情 即 不引用任何 UIView 或 UIViewController 使用presentModalViewController 在所有窗口顶部呈现一个 UIViewController 查看文
  • vim,将 script.py 粘贴到 python 解释器会丢失格式

    我正在尝试使用 ConqueTerm 重新映射一个键 以将脚本中选定的文本拉入 放入 Python 解释器中 一切都很好 除了这个 def main print Testing 123 main 变成这样 gt gt gt def main
  • 当数据为0时,如何使chartJs堆叠条形始终四舍五入?

    我想出了这个小提琴 https jsfiddle net 2s09hqLu https jsfiddle net 2s09hqLu 它按照我想要的方式堆叠了圆形图表 但问题是当数据数组中的值为 0 时 它不会使其四舍五入 我总是希望它四舍五
  • python中的连续字母列表并获取它的每个值

    我遇到了几乎同样的问题 如何制作连续的字母列表Python 从a z然后从aa ab ac等 https stackoverflow com questions 29351492 how to make a continuous alpha
  • 放大后删除绘制的矩形缩放框

    我正在尝试编写一个透明的可拖动矩形缩放框 一旦鼠标再次抬起 它就会放大该区域并删除绘制的矩形 我已经可以进行缩放并绘制矩形 但是我不能 1 弄清楚如何使其透明 和 2 弄清楚如何在放大后删除矩形 一旦单击鼠标在放大的图像上绘制另一个缩放框
  • 错误:请求失败,状态代码为 405

    我正在尝试在 Laravel React js 组合中建立 axios 示例 我通过以下命令配置了我的项目 作曲家创建项目 prefer dist laravel laravel react laravel basic 8 php arti
  • 使用for循环遍历java中的列表

    如何使用索引迭代列表数据结构 例如 考虑一个列表形式的句子 每个元素都是一个单词 我可以使用索引逐步浏览每个单词吗 像这样的事情 sentence defined something like this List
  • Django、ModelChoiceField() 和初始值

    我正在使用这样的东西 field1 forms ModelChoiceField queryset 如何使我的表单显示所选的值 如果你想设置默认的初始值 你应该定义initial http docs djangoproject com en
  • 如何将字体精美的图标放入选择下拉菜单中?

    我一直在努力在 vuejs 的选择下拉菜单中设置一个很棒的字体图标 我尝试过一些方法 比如
  • 在javascript中使用map或reduce将二维数组转换为对象

    是否可以转换 35 Bill 20 Nancy 27 Joan to Bill 35 Nancy 20 Joan 27 使用 map or reduce 方法 我可以使用以下方法转换数组 const arr 35 Bill 20 Nancy
  • Corona SDK 的本地通知 (Android)

    有没有办法在使用 Corona SDK 时实现本地通知 这是 Android 特定的 因为我们已经找到了 iOS 方向 Cheers 目前 Corona 上的本地通知仅适用于 iOS Android 版本尚未完成 完成后 我将按照 Andr
  • 将 Numpy 矩阵显示为视频

    我有一个 numpy 矩阵 其中每一行都是一张图片 我可以重塑行并使用 matplotlib pyplot 显示图像 问题是 我不想单独显示图像 我想像视频一样依次显示它们 这在Python中怎么可能呢 好吧 我不知道这是否是最好的方法 但
  • 包含(大多数)所有元素的 HTML 页面,用于样式设置

    是否有人拥有或知道包含所有元素 带有口语文本或其他内容 的 HTML 页面 我可以做一个 但我想一定有人已经这样做了 当开始一个项目时 我喜欢为链接 列表 表格等设置一些基本样式 包含所有元素的 HTML 页面将帮助我加快此过程 我很乐意创
  • 如何在 iOS 6 中启动具有特定地址的 iOS 地图应用程序?

    我有一个应用程序 允许用户启动地图应用程序 Google 或 Apple 来查看地址 我曾经这样做过 Address address self person addresses objectAtIndex 0 NSString addres