You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UIAlert弹窗展示时pushViewController失效问题及原因解析

iOS弹窗后pushViewController不生效的问题排查与解决

问题重现

我为UIViewController实现了一个+UIAlert分类扩展,在业务页面的findUser方法中,当userService查询用户出错时,先调用扩展的alert弹窗提示错误信息,随后立即调用doAuth方法(内部通过navigationController?.pushViewController跳转至登录页)。但实际运行时,点击弹窗的OK按钮后,弹窗消失,但登录页并没有被push出来。

解决方案

修改UIAlert扩展,为alert方法添加完成回调闭包,将doAuth的调用逻辑放入这个回调中,页面跳转功能恢复正常。

原因解析

控制台会输出关键提示:

pushViewController在已有过渡或展示操作时调用,导航栈不会更新。

弹窗展示的过程属于界面过渡操作,此时系统的界面焦点被弹窗占用,导航控制器处于"忙"的状态。如果在弹窗还未完成展示(或还未完全消失)时就调用pushViewController,系统会直接忽略这个导航栈更新请求。只有等弹窗的过渡操作完全结束(即用户点击OK后弹窗彻底消失),再执行跳转逻辑,才能触发导航控制器正常处理页面跳转。


内容的提问来源于stack exchange,提问作者Krzysztof P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:50:16