在位置访问弹出 Swift 中检测用户选择
Posted
技术标签:
【中文标题】在位置访问弹出 Swift 中检测用户选择【英文标题】:Detect user selection in Location Access Popup Swift 【发布时间】:2020-01-30 07:39:11 【问题描述】:我有一个视图控制器,它获取用户位置并显示附近的商店。
当用户第一次打开应用程序时,应用程序会显示一个弹出窗口供用户访问位置信息。如果用户允许定位,我在didUpdateLocations
调用API
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
if !isNearbyAlreadyLoaded
self.apiNearbyBakers()
isNearbyAlreadyLoaded = true
但如果用户不允许该位置,则永远不会调用我的 API。在这种情况下,我需要向他展示一个按钮以允许定位。
问题:
如何检测用户是否点击了允许位置弹出窗口中的不允许按钮。
【问题讨论】:
【参考方案1】:您可以使用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
【讨论】:
【参考方案2】:为 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
【讨论】:
以上是关于在位置访问弹出 Swift 中检测用户选择的主要内容,如果未能解决你的问题,请参考以下文章
按下主页按钮时,Swift CLLocationManager 弹出窗口不会停留