为啥在我的视图被推送到导航堆栈之前我的 UIAlertView 没有在屏幕上消失?
Posted
技术标签:
【中文标题】为啥在我的视图被推送到导航堆栈之前我的 UIAlertView 没有在屏幕上消失?【英文标题】:Why isn't my UIAlertView getting dismissed on the screen before my view gets pushed on the navigation stack?为什么在我的视图被推送到导航堆栈之前我的 UIAlertView 没有在屏幕上消失? 【发布时间】:2013-06-05 18:22:09 【问题描述】:这是按调用顺序排列的代码。当这段代码被调用时,屏幕上会出现一个UIAlertView
:
[upcAlertView dismissWithClickedButtonIndex:0 animated:YES];
[self.navigationController pushViewController:editController animated:YES];
问题是UIAlertView
在出现editController
时并未从屏幕上移除。我需要这些事情发生,因为我在editController
的viewWillAppear
中有一些加载,所以我想添加一个快速进度轮(但我需要对话框消失)。这段代码是从主线程调用的。
有人有什么见解吗?
【问题讨论】:
startAnimatingProgress 是做什么的? 只需在视图顶部的图像视图上放置一个进度轮。只是一个 UI 的东西。如果您将该行注释掉,UIAlertView 也会出现同样的问题。我编辑了我的问题以使其更清楚。 【参考方案1】:查看UIAlertViewDelegate 文档,更重要的是方法
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex;
调用此方法后,您可以推送视图控制器,以便在推送之前知道它已被关闭。
像这样:
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
[self.navigationController pushViewController:editController animated:YES];
【讨论】:
我使用的是 ActionSheet 委托,这导致了问题。谢谢!【参考方案2】:您的 UIAlertView 是否符合 UIAlertViewDelegate 协议?
您需要更新您的:
.h 文件
@interface YourClass : YourClassSuperClass <UIAlertViewDelegate>
.m 文件
UIAlertView *alert = //alloc init
[alert setDelegate: self];
添加此方法:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
switch (buttonIndex)
case(0):
//Cancel button
break;
case(..n):
//All other buttons
break;
default:
//should never be thrown
break;
【讨论】:
【参考方案3】:check uialerview delegate UIAlertViewDelegate
Sent to the delegate when the user clicks a button on an alert view.
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
//Sent to the delegate after an alert view is dismissed from the screen.
alertView:didDismissWithButtonIndex:
【讨论】:
以上是关于为啥在我的视图被推送到导航堆栈之前我的 UIAlertView 没有在屏幕上消失?的主要内容,如果未能解决你的问题,请参考以下文章