iOS 9 上的 UIWindows 未调用 UIAlertAction 处理程序
UIAlertAction handler not called across UIWindows on iOS 9
我正在尝试使用专用 UIWindow
来展示 UIAlertControllers
。一切都进行得很顺利,直到我意识到 UIAlertActions
上附加到 UIAlertControllers
的处理程序不会被触发,如果它们是由另一个 UIWindow
.[=19= 上的控制器呈现的话。 ]
如果我从主 viewController 上的任何 viewController 显示 UIAlertController
,则处理程序被触发,如果我从警报 window 的 rootViewController 显示它处理程序未被解雇。
关于我在这里可能遇到的情况有什么提示吗?谢谢!
编辑: Test Project 说明问题。
已解决: 我忘记在我的 alertWindowRootViewController 子类中覆盖 dismissViewControllerAnimated:completion:
时调用完成块。
我无法想象你为什么要这样做。但我的猜测是 Apple 正在优化 windows 上的一些不是关键 window.
的操作
无论简短的回答是什么,您都不应该这样做。
原来是我忘记在重写 dismissViewControllerAnimated:completion
时调用完成块。呸!
我已经更新了我的 Test Project 以包含修复程序,希望这对其他人有价值。
我确实比 Dylan Betterman's Solution 更喜欢我的解决方案,因为我的解决方案保留了一个与 UIAlertController
的生命周期无关的永久性 window。这意味着您可以保留指向警报控制器的强指针,这与 Dylan 的解决方案不同。
我正在尝试使用专用 UIWindow
来展示 UIAlertControllers
。一切都进行得很顺利,直到我意识到 UIAlertActions
上附加到 UIAlertControllers
的处理程序不会被触发,如果它们是由另一个 UIWindow
.[=19= 上的控制器呈现的话。 ]
如果我从主 viewController 上的任何 viewController 显示 UIAlertController
,则处理程序被触发,如果我从警报 window 的 rootViewController 显示它处理程序未被解雇。
关于我在这里可能遇到的情况有什么提示吗?谢谢!
编辑: Test Project 说明问题。
已解决: 我忘记在我的 alertWindowRootViewController 子类中覆盖 dismissViewControllerAnimated:completion:
时调用完成块。
我无法想象你为什么要这样做。但我的猜测是 Apple 正在优化 windows 上的一些不是关键 window.
的操作无论简短的回答是什么,您都不应该这样做。
原来是我忘记在重写 dismissViewControllerAnimated:completion
时调用完成块。呸!
我已经更新了我的 Test Project 以包含修复程序,希望这对其他人有价值。
我确实比 Dylan Betterman's Solution 更喜欢我的解决方案,因为我的解决方案保留了一个与 UIAlertController
的生命周期无关的永久性 window。这意味着您可以保留指向警报控制器的强指针,这与 Dylan 的解决方案不同。