我的代码非常基础。我有 2 个 View Controller 。在名为“FirstScreen”的第一个 viewController 上有一个按钮,通过模态 segue 将我带到第二个屏幕,那里还有一个按钮。 “SecondScreen”有一个带有 1 方法的协议(protocol),“FirstScreen”符合该协议(protocol)。所以基本上我试图从该方法调用 UIAlertController
,同时按下“SecondScreen”的按钮。结果我得到:
"Warning: Attempt to present.....on....whose view is not in the window hierarchy!
我知道我可以在我的 Storyboard 中嵌入一个导航 Controller 并且警报会起作用,但对我来说不是这样。我也想以这种方式调用警报,因为需要知道 CLAuthorizationStatus
。
So maybe is there any way of getting the status directly from the "SecondScreen" ?
import UIKit
import CoreLocation
class FirstScreen: UIViewController {
@IBAction func firstTapped(_ sender: UIButton) {
let selectionVC = storyboard?.instantiateViewController(withIdentifier: "secondVC") as! SecondScreen
present(selectionVC, animated: true, completion: nil)
selectionVC.delegate = self
}
}
extension FirstScreen: LocationPermissionDelegate {
func checkLocationStatus() {
let status = CLLocationManager.authorizationStatus()
if status == CLAuthorizationStatus.notDetermined {
let alert = UIAlertController(title: "Just a message", message: "HEYYY!", preferredStyle: .alert)
let action = UIAlertAction(title: "Dismiss", style: .default, handler: nil)
alert.addAction(action)
present(alert, animated: true)
}
}
}
import Foundation
import UIKit
protocol LocationPermissionDelegate {
func checkLocationStatus()
}
class SecondScreen: UIViewController {
var delegate: LocationPermissionDelegate?
@IBAction func secondTapped(_ sender: UIButton) {
delegate?.checkLocationStatus()
}
}
firstvc目前正在展示
present(selectionVC, animated: true, completion: nil)
所以你不能在这里显示警报
present(alert, animated: true)
移动这个
func checkLocationStatus() {
let status = CLLocationManager.authorizationStatus()
if status == CLAuthorizationStatus.notDetermined {
let alert = UIAlertController(title: "Just a message", message: "HEYYY!", preferredStyle: .alert)
let action = UIAlertAction(title: "Dismiss", style: .default, handler: nil)
alert.addAction(action)
present(alert, animated: true)
}
}
到第二个vc,在那里做演示
关于ios - 如何从委托(delegate)方法启动 UIAlertController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54275477/
欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) | Powered by Discuz! X3.4 |