【发布时间】:2013-04-10 13:54:31
【问题描述】:
当您第一次使用 MKMapView 启动应用程序时,应用程序会显示警告消息“想要使用您当前的位置”,选项为“不允许”和“确定”。
我需要自定义此消息。我还需要知道用户选择了哪个选项。我怎样才能做到这一点?
更新: 我需要在 iOS 5+ 上实现这个
【问题讨论】:
标签: iphone ios google-maps ios5 uialertview
当您第一次使用 MKMapView 启动应用程序时,应用程序会显示警告消息“想要使用您当前的位置”,选项为“不允许”和“确定”。
我需要自定义此消息。我还需要知道用户选择了哪个选项。我怎样才能做到这一点?
更新: 我需要在 iOS 5+ 上实现这个
【问题讨论】:
标签: iphone ios google-maps ios5 uialertview
在CLLocationManager 设置用途属性
来自这个问题:Replacement for "purpose" property of CLLocationManager
安娜卡列尼娜的回答
在 iOS 6 中替代 purpose 属性是一个新的 Info.plist 名为 NSLocationUsageDescription 的键(又名“隐私 - 位置使用 说明”)。
密钥记录在信息属性列表密钥参考中 但不幸的是,它没有在弃用说明中提到 目的属性。
但是,CLLocationManager.h 确实有这样的注释:
- 已弃用。使用键 NSLocationUsageDescription 在 Info.plist 中设置目的字符串。
在您的代码中,您可以同时设置 key 和 purpose 属性(但 您可能想检查位置管理器是否对此做出响应 如果/当该方法在未来被实际删除时,选择器优先)。
如果在 iOS 6 下运行,位置管理器将使用密钥。什么时候 在低于 iOS 6 下运行,key 将被忽略和目的 将使用属性。
【讨论】:
purpose 属性呢?也可以使用 NSLocationUsageDescription 进行欺骗,但它不会自定义消息,它只是在默认警报消息下方添加额外的文本
对于消息,您可以使用 Alex Terente 所说的 purpose 属性,但它在 iOS 6 中已被弃用
用于了解用户是否拒绝了位置管理器提供的失败委托的权限。 mapview 使用自己的位置管理器,因此:使用 MKMapView 函数 didFailToLocateUserWithError
- (void)mapView:(MKMapView *)mapView didFailToLocateUserWithError:(NSError *)error {
switch([error code]) {
case kCLErrorDenied:{
//user denied
}
break;
}
}
注意:如果您直接使用 CLLocationManager,它将是 - (void)locationManager: (CLLocationManager *)manager didFailWithError: (NSError *)error;
【讨论】:
如果您正在为 iOS 6+ 构建,请在您的 Info.plist 文件中使用 NSLocationUsageDescription。插入此键并将其值设置为您将如何处理位置信息的描述。
【讨论】: