Как сделать так, чтобы запрос разрешения местоположения срабатывал только тогда, когда пользователь нажимает на вкладку карты в UITabBar? - PullRequest
0 голосов
/ 22 октября 2019

Я создаю приложение, используя UITabBar, и одним из элементов вкладки является карта. Я хочу, чтобы пользователь отвечал на запрос LocationService () только при нажатии на вкладку карты. Однако, когда приложение загружается в tabBar, первым делом появляется запрос разрешения местоположения.

enter image description here

Вот код для LocationService ()

import CoreLocation

protocol LocationServiceDelegate: class {
    func authorizationDenied()
    func setMapRegion(center: CLLocation)
}

class LocationService: NSObject {
    var locationManager = CLLocationManager()
    weak var delegate: LocationServiceDelegate?

    override init() {
        super.init()

        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
    }

    private func checkAuthorizationStatus() {
        switch CLLocationManager.authorizationStatus() {
        case .notDetermined:
            locationManager.requestAlwaysAuthorization()

        case .denied:
            delegate?.authorizationDenied()

        case .authorizedAlways, .authorizedWhenInUse:
            startUpdatingLocation()

        default:
            break
        }
    }

    private func startUpdatingLocation() {
        locationManager.startUpdatingLocation()
    }
}


extension LocationService: CLLocationManagerDelegate {
    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
        checkAuthorizationStatus()
    }

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        locationManager.stopUpdatingLocation()

        if let location = locations.last {
            delegate?.setMapRegion(center: location)
        }
    }

    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
        print(error.localizedDescription)
    }
}

Первоначально метод вызывался в viewDidLoad, поэтому карта была бы в центре местоположения пользователя, поэтому я переместил его в viewDidAppear, но я все равно получаю такое же уведомление при запуске приложения.

Как отложить запрос на разрешение до тех пор, пока пользователь фактически не нажмет на вкладку карты - в этом случае вкладка DIY Stores?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...