在位置访问弹出窗口中检测用户选择 Swift
Detect user selection in Location Access Popup Swift
我有一个视图控制器,它获取用户位置并显示附近的商店。
当用户第一次打开该应用时,该应用会显示一个弹出窗口,让用户允许访问位置信息。如果用户允许位置,我在 didUpdateLocations
中调用 API
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
if !isNearbyAlreadyLoaded {
self.apiNearbyBakers()
isNearbyAlreadyLoaded = true
}
}
但是如果用户不允许该位置,我的 API 永远不会被调用。在那种情况下,我需要给他看一个允许定位的按钮。
问题:
我如何检测用户是否点击了允许位置弹出窗口中的不允许按钮。
您可以使用didChangeAuthorization
回调方法。当用户从弹出窗口中选择一个选项时调用此方法。
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if status == .authorizedAlways {
if CLLocationManager.isMonitoringAvailable(for: CLBeaconRegion.self) {
if CLLocationManager.isRangingAvailable() {
// do stuff
}
}
}
if status == .denied {
// handle your case
}
}
有一篇关于此的完整文章here
为 CLLocationManagerDelegate 创建一个扩展
然后检查状态并相应地执行您的功能,如果未设置权限则打开设置。
extension HomeVC: CLLocationManagerDelegate {
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
guard status == .authorizedAlways || status == .authorizedWhenInUse else {
if status == .denied || status == .notDetermined || status == .restricted || status == .authorizedWhenInUse {
let alert = UIAlertController(title: "Title", message:"Some Descriptions" , preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
alert.addAction(UIAlertAction(title: "Settings", style: .default, handler: { _ in
let url = URL(string: UIApplication.openSettingsURLString)!
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}))
self.present(alert, animated: true, completion: nil)
}
return
}
}
}
我有一个视图控制器,它获取用户位置并显示附近的商店。
当用户第一次打开该应用时,该应用会显示一个弹出窗口,让用户允许访问位置信息。如果用户允许位置,我在 didUpdateLocations
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
if !isNearbyAlreadyLoaded {
self.apiNearbyBakers()
isNearbyAlreadyLoaded = true
}
}
但是如果用户不允许该位置,我的 API 永远不会被调用。在那种情况下,我需要给他看一个允许定位的按钮。
问题:
我如何检测用户是否点击了允许位置弹出窗口中的不允许按钮。
您可以使用didChangeAuthorization
回调方法。当用户从弹出窗口中选择一个选项时调用此方法。
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if status == .authorizedAlways {
if CLLocationManager.isMonitoringAvailable(for: CLBeaconRegion.self) {
if CLLocationManager.isRangingAvailable() {
// do stuff
}
}
}
if status == .denied {
// handle your case
}
}
有一篇关于此的完整文章here
为 CLLocationManagerDelegate 创建一个扩展
然后检查状态并相应地执行您的功能,如果未设置权限则打开设置。
extension HomeVC: CLLocationManagerDelegate {
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
guard status == .authorizedAlways || status == .authorizedWhenInUse else {
if status == .denied || status == .notDetermined || status == .restricted || status == .authorizedWhenInUse {
let alert = UIAlertController(title: "Title", message:"Some Descriptions" , preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
alert.addAction(UIAlertAction(title: "Settings", style: .default, handler: { _ in
let url = URL(string: UIApplication.openSettingsURLString)!
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}))
self.present(alert, animated: true, completion: nil)
}
return
}
}
}