禁用位置服务后立即显示alertview

时间:2015-11-14 22:55:48

标签: ios swift uialertview

我正在制作一款需要启用定位服务的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。我希望用户在安装应用程序时按“不允许位置服务”后立即显示此警报视图。

有没有办法让这个动作发生?

1 个答案:

答案 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!还最好检查是否尚未显示该警报视图以避免多重警报。