我遇到了一个问题,当我调用UIAlertView的dismissWithClickedButtonIndex:animated:时,9次中有9次,委托方法alertView:willDismissWithButtonIndex:未被调用。还有其他人遇到这个问题吗?我即将向Apple提交一个错误,但我很想知道是否还有其他人遇到过这个问题,并想出任何解决方法。
答案 0 :(得分:9)
为了确保iOS4和5之间的一致行为,您可以在调用其 dismissWithClickedButtonIndex:animated:方法之前删除UIAlertView的委托,然后手动调用委托方法。 e.g。
- (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];
}
(该代码未经过测试,但您明白了。)
答案 1 :(得分:2)
只有在用户执行操作时才会调用UI对象的代理。 Apple假设当您从代码中执行某些操作时,您已经知道自己在做什么,并且不需要通知您。这适用于所有委托(滚动UIScrollView的委托方法与代码滚动,表视图操作,...)
无论如何,代表被调用的按钮索引是什么?..当你以编程方式解雇时没有人
答案 2 :(得分:1)
根据Why doesn't dismissWithClickedButtonIndex ever call clickedButtonAtIndex?,问题是正在调用另一种方法。但是,这并不能解释为什么会出现不稳定的调用。在我测试的设备上,正确调用了dismiss方法,因此我只将其重定向到点击版本。
如果你继续看到不稳定的行为,也许你应该向Apple提交一个错误。
答案 3 :(得分:0)
有alertView:clickedButtonAtIndex:
,alertView:didDismissWithButtonIndex:
和alertView:willDismissWithButtonIndex:
。您引用的方法(clickedButtonAtIndex:
)仅在用户明确点击警报视图上的按钮时调用(因此“点击”)。
通过dismissWithClickedButtonIndex:animated:
拨打电话以解除警报似乎不会调用alertView:clickedButtonAtIndex:
。
因此,如果您需要在解除警报视图时始终触发某些行为 - 无论是由用户点击按钮触发还是以编程方式触发 - 然后使用didDismissWithButtonIndex:
和{{1}更有意义。