我正在尝试设置一个登机牌,我要求用户提供一些权限,包括:位置,通知和相机。我设置了3个不同的视图控制器,每个都要求其中一个权限并解释原因。在每个视图控制器上,我在底部有一个按钮,显示“授予权限”。
当用户点击按钮时,我希望弹出权限对话框,一旦用户点击允许,我想转换到下一个视图控制器。
这就是我现在所拥有的:
class OnboardingStep2:UIViewController{
override func viewDidLoad() {
self.view.backgroundColor = StyleKit.orangeWhite()
}
@IBAction func getPermission(sender: AnyObject) {
dispatch_sync(dispatch_get_main_queue()) {
let locManager = CLLocationManager()
locManager.requestAlwaysAuthorization()
}
if (CLLocationManager.authorizationStatus() == CLAuthorizationStatus.Authorized) {
self.performSegueWithIdentifier("goToStep3", sender: self)
}
}
}
我尝试使用dispatch排队任务,但是当使用异步时,会弹出权限对话框,然后立即关闭,因为授权检查已经运行(我假设)。使用dispatch_sync,永远不会显示对话框。
执行此操作的最佳方法是什么,我希望首先弹出权限对话框,一旦用户点击允许我想要删除。
答案 0 :(得分:3)
符合CLLocationManagerDelegate
然后打电话给:
Swift 3.0
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
switch status {
case .notDetermined:
manager.requestLocation()
case .authorizedAlways, .authorizedWhenInUse:
// Do your thing here
default:
// Permission denied, do something else
}
}
Swift 2.2
func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
switch status {
case .NotDetermined:
manager.requestLocation()
case .AuthorizedAlways, .AuthorizedWhenInUse:
// Do your thing here
default:
// Permission denied, do something else
}
}