Leo*_*ica 58 uikit uiactionsheet ios uialertcontroller
所以我注意到在iPad上的iOS8 beta 3(更新:仍然发生在iOS 11.2中),当尝试从a的委托方法中呈现视图控制器时UIActionSheet,"没有"发生并且日志消息输出到调试控制台,说明在转换警报控制器时尝试演示:
Warning: Attempt to present <UIViewController: 0x...> on <ViewController: 0x...> which is already presenting <UIAlertController: 0x...>
Run Code Online (Sandbox Code Playgroud)
Leo*_*ica 138
更新:从iOS 9 SDK开始,UIActionSheet不推荐使用,因此不要指望针对此问题进行修复.最好UIAlertController在可能的时候开始使用.
这个问题似乎来自于苹果公司在UIAlertController内部使用以实现警报视图和操作表的功能.问题主要出现在iPad和操作表上,因为在iPad上,操作表在指定视图中显示为弹出窗口,而Apple所做的就是在响应者链中行进,直到找到视图控制器并presentViewController:animated:completion:使用内部调用UIAlertController.问题在iPhone和警报视图上不那么明显,因为Apple实际上创建了一个单独的窗口,一个空的视图控制器并UIAlertController在其上面显示内部,所以它似乎不会干扰其他演示.
我已经为此问题打开了错误报告:rdar:// 17742017.请复制它,让Apple知道这是一个问题.
作为一种解决方法,我建议使用以下方法将演示文稿延迟到下一个runloop:
dispatch_async(dispatch_get_main_queue(), ^ {
[self presentViewController:vc animated:YES completion:nil];
});
Run Code Online (Sandbox Code Playgroud)
Kju*_*uly 31
您可以尝试完成工作(呈现视图控制器)
- (void) actionSheet:(UIActionSheet *)actionSheet
didDismissWithButtonIndex:(NSInteger)buttonIndex {}
Run Code Online (Sandbox Code Playgroud)
代替
- (void) actionSheet:(UIActionSheet *)actionSheet
clickedButtonAtIndex:(NSInteger)buttonIndex {}
Run Code Online (Sandbox Code Playgroud)
正如@LeoNatan所说,"问题似乎来自于苹果公司内部使用UIAlertController来实现警报视图和操作表的功能".所以你必须等待被解雇的动作表,然后呈现你想要的视图控制器.
@LeoNatan的解决方案只是阻止主线程的UI,因此它还将确保在操作表被解除后显示视图控制器.
| 归档时间: |
|
| 查看次数: |
34047 次 |
| 最近记录: |