繁体   English   中英

以编程方式解除iOS 5上的UIAlertView不会调用didDismiss委托方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM