【发布时间】:2020-01-31 14:05:05
【问题描述】:
有可能,我的控制器上有自定义视图,我必须在其上显示警报。所以我使用下面的扩展在窗口而不是任何 UIViewController 上呈现控制器。
扩展
extension UIViewController {
func presentControllerToWindow(){
let win = UIWindow(frame: UIScreen.main.bounds)
let vc = UIViewController()
vc.view.backgroundColor = .clear
win.rootViewController = vc
win.windowLevel = UIWindow.Level.alert + 1
win.makeKeyAndVisible()
vc.present(self, animated: true, completion: nil)
}
}
当前 AlertController
let alertController = UIAlertController(title: nil, message: "Select Option", preferredStyle: .alert)
alertController.presentControllerToWindow()
问题:
代码在 swift 4.X 之前运行良好,但在 swift 5.X 中,警报控制器会在另一秒出现并自动关闭。
GIF:
- OpenPicker 将自定义视图添加为子视图。
- 点击添加文件后,我将展示 alertcontroller。
- 它会自动关闭。
编辑:
我正在添加我的自定义视图,如下所示。
extension UIView {
func addToWindow() {
let window = UIApplication.shared.keyWindow!
self.frame = window.bounds
window.makeKeyAndVisible()
window.windowLevel = window.windowLevel + 1
window.addSubview(self)
}
}
let customView = MyCustomView()
customView.addToWindow()
现在结束这个MyCustomView,我需要显示UIAlertController
【问题讨论】:
-
你不应该触摸窗口,你可以找到顶部视图控制器并直接在那里显示警报。
-
@PrashantTukadiya 窗口有什么问题?
-
@jalone 没问题,但这不是一个好习惯 - 可能存在多窗口应用程序之类的场景 - 并且有可能与应用程序的某些本机控件发生冲突 - 警报视图应该从应用中可见的最顶部视图
标签: ios windows uialertcontroller swift5