Iphone UIAlertViewDelegate Clicked按钮索引:有用性?

Iphone UIAlertViewDelegate Clicked按钮索引:有用性?,iphone,cocoa-touch,Iphone,Cocoa Touch,UIAlertViewDelegate协议定义了两种方法,alertView:ClickedButtonIndex:和alertView:didDismissWithButtonIndex:,在我看来,这两种方法的实用性是相同的 当它们都做相同的事情时,为什么会有一个ClickedButtonIndex和一个DidDismissButtonWhithIndex?我意识到还有一个willDismissButtonWithIndex,它发生在解除警报视图之前,但是是否有任何理由使用ClickedBu

UIAlertViewDelegate
协议定义了两种方法,
alertView:ClickedButtonIndex:
alertView:didDismissWithButtonIndex:
,在我看来,这两种方法的实用性是相同的


当它们都做相同的事情时,为什么会有一个
ClickedButtonIndex
和一个
DidDismissButtonWhithIndex
?我意识到还有一个
willDismissButtonWithIndex
,它发生在解除警报视图之前,但是是否有任何理由使用
ClickedButtonIndex
而不是
didDismissButtonWithIndex

当用户单击警报视图上的按钮时会调用
alertView:ClickedButtonIndex:
,而在从警报视图中取消警报视图后会调用
alertView:didDismissWithButtonIndex:
屏幕。(见附件。)


差异很小,但它允许您在动画之前或之后执行某些操作。

我发现两者之间存在更有用的差异:


当显示
UIAlertView
且设备进入睡眠状态时,会调用
alertView:DidDismissWithButtonIndex:
,即使警报视图实际上没有被解除。一旦设备唤醒,它将再次显示<代码>警报视图:ClickedButtonIndex:仅在用户单击其中一个按钮时调用。

如果警报视图因任何原因消失(包括被另一个UIAlertView覆盖、进入睡眠等),则调用
DidDismissWithButtonIndex:
。这意味着即使用户不点击任何东西也可以调用该方法。如果依赖于调用此委托回调以响应用户实际单击按钮,则这可能会导致意外行为。在这种情况下,
ClickedButtonIndex:
更有用。

我无法通过使用iOS 7上的警报视图锁定设备来重现Ed的行为

但是,
alertView:ClickedButtonIndex:
alertView:didDismissWithButtonIndex:
alertView:willDismissWithButtonIndex:
之间最重要的区别在于第一种方法(
ClickedButtonIndex:
)仅当用户明确点击警报视图上的按钮时调用(因此“单击”)

是否可能在不单击按钮的情况下取消警报视图?是的,您可以使用
UIAlertView
方法
dismissWithClickedButtonIndex:animated:
以编程方式隐藏警报视图


所以,如果您需要在解除警报视图时始终触发某些行为,无论它是由用户点击按钮触发还是通过编程触发,那么使用
diddismisswithbuttonnindex:
willdismisswithbuttonnindex:
更有意义。

willdismisswithbuttonnindex方法看起来完全正确与ClickedButtonIndex相同:那么……是的,但有一点不同。一种是当用户按下按钮时调用(因此警报始终可见),另一种是当警报消失时调用。因此,例如,如果您希望在两个视图之间进行转换,最好在“alertView:didDismissWithButtonIndex:”中关闭警报后进行转换。但是,是否有任何理由使用ClickedButtonIndex而不是willDismissWithButtonIndex(而不是didDismiss)反之亦然?您可以使用此方法跟踪UIAlertView动画的开始和结束。但是我现在还没有任何关于这个的用例。。。