以编程方式关闭 UIAlertView

Posted

技术标签:

【中文标题】以编程方式关闭 UIAlertView【英文标题】:dismissing a UIAlertView programmatically 【发布时间】:2012-09-14 00:58:27 【问题描述】:

我需要有关 的帮助。目前我有这个

UIAlertView *alert1 = [[UIAlertView alloc]initWithTitle:@"title" message:@"message" delegate:nil cancelButtonTitle:nil otherButtonTitles:nil];

后来我叫这个

[alert1 dismissWithClickedButtonIndex:0 animated:NO];

但什么也没发生。

【问题讨论】:

当你调用“dismissWithClickedButtonIndex”时,“alert1”不为空吗? 您是否在同一代码块中调用showdismiss?这不起作用,因为show 需要时间来执行。 不会在很久以后有条件地调用解雇。 你如何进入“稍后”?你应该告诉我们更多你在做什么...... @Nick P 委托:self 和两个按钮引用都设置为 nil,因此 dismissWithClickedButtonIndex 将没有任何可引用的内容。您需要为 otherButtonTitles 设置至少一个标题值:@"Continue",nil 【参考方案1】:

你需要设置两件事。

1.包含您的 .h 文件: <UIAlertViewDelegate>

2。请按照以下实现...

   UIAlertView *alert1 = [[UIAlertView alloc]initWithTitle:@"title" message:@"message" delegate:nil cancelButtonTitle:nil otherButtonTitles:nil]; 
        [alert1 show];
        [self performSelector:@selector(dismiss:) withObject:alert1 afterDelay:1.0];

dismiss 方法将是...

-(void)dismiss:(UIAlertView*)alert

    [alert dismissWithClickedButtonIndex:0 animated:YES];

希望对你有所帮助。

【讨论】:

【参考方案2】:

我也遇到过这个问题。 就我而言,出于某种原因调用:

[alert dismissWithClickedButtonIndex:0 animated:NO];

并不总是有效(是的,甚至在 UI 线程上调用它,是的,警报!= nil),而是简单地将动画标志设置为 YES 它有效:

[alert dismissWithClickedButtonIndex:0 animated:YES];

可能是 Apple 的错误...

【讨论】:

【参考方案3】:

你应该先显示它:

UIAlertView *alert1 = [[UIAlertView alloc]initWithTitle:@"title" message:@"message" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:nil];
    [alert1 show];

然后在委托方法中

- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex
    if(buttonIndex==0)
     // do something
    

【讨论】:

只有当 O.P. 在创建警报时正确设置其委托时,才会调用该委托方法。 我忘了说我已经展示了它,就像你描述的那样。我试过这个我得到了相同的结果。什么都没有发生。 你设置了alert1的代理吗? 是的,但我不知道该放什么。【参考方案4】:

你调用的方法是正确的。 我猜当您调用方法 dismissWithClickedButtonIndex:animated 时,alert1 为零: 尝试检查您的变量 alert1。

【讨论】:

我刚刚检查过,当我调用该方法时它不是 nil【参考方案5】:

您可以改用委托方法 -alertView:didDismissWithButtonIndex: - 一旦从屏幕上删除警报视图,它就会被调用,或者更好的方法是,使用后台线程,例如使用 -performSelectorInBackground:withObject:,来处理您需要做的任何处理。

【讨论】:

以上是关于以编程方式关闭 UIAlertView的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式关闭 iPhone?

以编程方式锁定或关闭屏幕

如何以编程方式关闭/禁用 NFC?

以编程方式关闭 Android 手机

以编程方式访问 Graphite 数据的最佳方式是啥? [关闭]

Android - 以编程方式打开或关闭 GPS