以编程方式关闭 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
”不为空吗?
您是否在同一代码块中调用show
和dismiss
?这不起作用,因为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的主要内容,如果未能解决你的问题,请参考以下文章