2

我正在嘗試設置一個登錄狀態,在該位置我要求用戶提供一些權限,包括:位置,通知和相機。我有3個不同的視圖控制器設置,每個要求其中一個權限並解釋原因。在每個視圖控制器上,我在底部有一個按鈕,其中顯示「授予權限」。如何在授予位置權限後執行任務ios

當用戶點擊按鈕我想要彈出權限對話框,並且一旦用戶點擊允許,我想轉換到下一個視圖控制器。

這是我現在所擁有的:

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_sync,對話從不顯示。

要做到這一點,最好的方法是什麼?我想先允許對話彈出,一旦用戶點擊允許我想繼續。

回答

3

順應CLLocationManagerDelegate

然後調用此:

夫特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 
    } 
} 

夫特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 
    } 
} 
+0

我更新的代碼包括第e委託,但每當我點擊提示用戶許可的按鈕時,彈出權限對話框,然後在一秒之內消失,然後我甚至可以點擊允許。你知道這個的原因嗎? –

+0

是的,你的位置管理器對象超出了範圍(它被清除,因爲它只存在於函數中)。將您的位置管理器設置爲實例變量,然後重試。 – CodeBender