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动画的开始和结束。但是我现在还没有任何关于这个的用例。。。