我正在制作一款需要启用定位服务的iOS应用。因此,只要我的应用程序安装完毕,它就会要求用户允许定位服务。显然,很多用户按“不允许”,最终没有使用我的iOS应用程序。
在我的应用中,我输入以下代码行:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
if CLLocationManager.authorizationStatus() == CLAuthorizationStatus.Denied {
self.locationAlert = UIAlertView(title: "Location Services Permission Needed", message: "Location service needs to be turned on to use Peek! Please press setting button below and turn the service on!", delegate: self, cancelButtonTitle: "Settings")
locationAlert.show()
}
}
extension ViewController: UIAlertViewDelegate {
func alertView(alertView: UIAlertView, clickedButtonAtIndex buttonIndex: Int) {
alertView.dismissWithClickedButtonIndex(buttonIndex, animated: true)
UIApplication.sharedApplication().openURL(NSURL(string: UIApplicationOpenSettingsURLString)!)
}
}
问题是只在重新打开应用程序时才会显示alertview。我希望用户在安装应用程序时按“不允许位置服务”后立即显示此警报视图。
有没有办法让这个动作发生?
答案 0 :(得分:2)
您可以使用CLLocationManagerDelegate的委托方法:
- (void)locationManager:(CLLocationManager *)manager
didChangeAuthorizationStatus:(CLAuthorizationStatus)status
此方法会告诉您位置授权的状态是否已更改。
示例:强>
func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
switch status {
case .Denied:
// Changed status to denied
break;
default:
break;
}
}
注意: 请记住将CLLocationManager的委托设置为self!还最好检查是否尚未显示该警报视图以避免多重警报。