为啥在我的视图被推送到导航堆栈之前我的 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 时并未从屏幕上移除。我需要这些事情发生,因为我在editControllerviewWillAppear 中有一些加载,所以我想添加一个快速进度轮(但我需要对话框消失)。这段代码是从主线程调用的。

有人有什么见解吗?

【问题讨论】:

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 没有在屏幕上消失?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查视图控制器是不是以模态方式呈现或推送到导航堆栈上?

转到应用程序中的第一个视图控制器

为啥不需要的数据被推送到我的阵列中?

为啥我的 UINavigationBar 不会动画?

如何在将数据推送到导航堆栈之前将数据传递给视图控制器并加载它?

当一个新的视图控制器被推送到导航控制器时,将一个子视图保持在屏幕上的同一位置?