[英]Programmatically dismissing a UIAlertView on iOS 5 doesn't call didDismiss delegate method
当我调用UIAlertView的dismissWithClickedButtonIndex:animated:时,我遇到了一个问题,其中9次出现问题,委托方法alertView:willDismissWithButtonIndex:未被调用。 还有其他人遇到这个问题吗? 我即将向Apple提交一个错误,但我很想知道是否有其他人遇到过这个问题,并想出任何解决方法。
为了确保iOS4和5之间的一致行为,您可以在调用其dismissWithClickedButtonIndex:animated:方法之前删除UIAlertView的委托,然后手动调用委托方法。 例如
- (void)somethingDidHappen {
id<UIAlertViewDelegate> delegate = myAlertView.delegate;
myAlertView.delegate = nil;
// now, we know the delegate won't be called...
[myAlertView dismissWithClickedButtonIndex:0 animated:NO];
// ...so we call it ourselves below
[delegate alertView:myAlertView clickedButtonAtIndex:0];
}
(该代码未经过测试,但您明白了。)
只有在用户执行操作时才会调用UI对象的代理。 Apple假设当您从代码中执行某些操作时,您已经知道自己在做什么,并且不需要通知您。 这适用于所有委托(滚动UIScrollView的委托方法与代码滚动,表视图操作,...)
无论如何,代理人应该使用什么按钮索引?..当你以编程方式解雇时,没有人
根据为什么不解雇WithClickedButtonIndex曾经调用过clickedButtonAtIndex? 问题是正在调用另一种方法。 但是,这并不能解释为什么你会得到不稳定的电话。 在我测试的设备上,正确调用了dismiss方法,因此我只将其重定向到click版本。
如果你继续看到不稳定的行为,也许你应该向Apple提交一个错误。
有alertView:clickedButtonAtIndex:
alertView:didDismissWithButtonIndex:
和alertView:willDismissWithButtonIndex:
您引用的方法( clickedButtonAtIndex:
仅在用户明确点击警报视图上的按钮时调用(因此“点击”)。
通过dismissWithClickedButtonIndex:animated:
编程调用dismissWithClickedButtonIndex:animated:
取消警报似乎没有调用alertView:clickedButtonAtIndex:
.
因此,如果您需要在解除警报视图时始终触发某些行为 - 无论是由用户点击按钮还是以编程方式触发 - 然后使用didDismissWithButtonIndex:
和willDismissWithButtonIndex:
更有意义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.