alertView didDismissWithButtonIndex从未调用过

时间:2013-07-08 21:32:50

标签: iphone ios objective-c uialertview ios6.1

请原谅我,如果事情不对,那么......第一次发帖。

我已经看到了一些与此类似的问题,但没有一个问题存在同样的问题。我正在运行IOS 6.1和Xcode 4.6。问题是didDismiss永远不会被调用,只有willDismiss。我的代码与日志输出一起在下面。有什么想法吗?

#import "MenkLabUIAlertTestViewController.h"

@interface MenkLabUIAlertTestViewController ()

@end

@implementation MenkLabUIAlertTestViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.


}
- (IBAction)test:(id)sender {
    UIAlertView *av  = [[UIAlertView alloc] initWithTitle:@"Encrypting File(s)" message:@"Please wait..." delegate:self cancelButtonTitle:nil otherButtonTitles:nil, nil];
    //    UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    [av show];
    [av dismissWithClickedButtonIndex:-1 animated:YES];
}

- (void) alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex {
    NSLog(@"willDISMIS");
}

- (void) alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
    NSLog(@"didDISMIS");
   }


- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

日志输出:

2013-07-08 17:27:04.055 testUIAlertView [10534:11303] willDISMIS

这只是一个测试应用程序,但是,它与我当前的应用程序中存在完全相同的问题。

先谢谢了。这一整天都在绞尽脑汁!

5 个答案:

答案 0 :(得分:2)

我认为这是你正在展示的事实,然后立即以相同的方法解雇警报视图 - 你真的永远不会在真正的应用程序中这样做。如果您为警报视图创建一个属性,然后执行如下所示的测试,它可以正常工作:

- (IBAction)test:(id)sender {
    self.av  = [[UIAlertView alloc] initWithTitle:@"Encrypting File(s)" message:@"Please wait..." delegate:self cancelButtonTitle:nil otherButtonTitles:nil, nil];
    [self.av show];
    [self performSelector:@selector(dismissAlertView) withObject:nil afterDelay:1];
}


-(void)dismissAlertView {
    [self.av dismissWithClickedButtonIndex:-1 animated:YES];
}

- (void) alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex {
    NSLog(@"willDISMIS");
}

- (void) alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
    NSLog(@"didDISMIS");
}

答案 1 :(得分:0)

我遇到了类似的问题,作为一种解决方法,我们添加了一个选择器方法,该方法在一段延迟后运行,而不会触发警报视图的解雇。如果我们要求警报在显示后立即解雇,我不确定为什么它不起作用。希望它有所帮助。

答案 2 :(得分:0)

我也遇到了这个问题。对我而言,这与尝试以-1的按钮索引以编程方式解除它有关。出于其他原因,我们最终走上了另一条道路。但是,操作表上有一个取消按钮索引,您可以尝试使用它来调用它。

答案 3 :(得分:0)

我遇到过这个问题一次。对我来说,问题是由动画之间的碰撞引起的。动画结束时调用didDismiss选择器。如果在willDismissdidDismiss之间启动了另一个动画,那么在极少数情况下,不必调用didDismiss

另请注意,如果您在完全显示警报之前尝试关闭警报,它将无法正常工作。

答案 4 :(得分:0)

我补充说。这解决了我的问题。

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 1)
     {
     }
}