Подтвердить что ты не робот

UIAlertViewDelegate clickedButtonAtIndex: полезность?

Протокол UIAlertViewDelegate определяет два метода: alertView:clickedButtonAtIndex: и alertView:didDismissWithButtonIndex:, которые кажутся мне одинаковыми по полезности.

Почему существует clickedButtonAtIndex и didDismissButtonWithIndex, когда они оба делают одно и то же? Я понимаю, что есть также willDismissButtonWithIndex, который происходит до того, как предупреждение будет отклонено, но есть ли причина использовать clickedButtonAtIndex вместо didDismissButtonWithIndex?

4b9b3361

Ответ 1

Я нашел более полезное различие между ними:

При показе UIAlertView, и устройство переходит в спящий режим, вызывает вызов alertView:didDismissWithButtonAtIndex:, даже если представление предупреждения фактически не отклонено. Он снова отображается, как только устройство просыпается. alertView:clickedButtonAtIndex: вызывается только тогда, когда пользователь нажимает одну из кнопок.

Ответ 2

Вызов alertView:clickedButtonAtIndex: вызывается, когда пользователь нажимает кнопку в представлении предупреждения, а alertView:didDismissWithButtonIndex: вызывается после того, как предупреждение открывается с экрана. (См. Ссылка на протокол UIAlertViewDelegate.)

Разница минимальна, но позволяет делать что-то до или после анимации.

Ответ 3

Если представление предупреждения исчезает по какой-либо причине (включая доступ к другому UIAlertView, переключение в режим сна и т.д.), вызывается didDismissWithButtonAtIndex:. Это может означать, что метод можно вызвать даже без щелчка пользователем ни на что. Это может привести к неожиданному поведению, если вы зависите от этого обратного вызова делегата, который должен быть вызван в ответ на то, что пользователь на самом деле нажал кнопку. В этом случае clickedButtonAtIndex: более полезен.

Ответ 4

Я не смог воспроизвести поведение Эд, заблокировав свое устройство с помощью вида alert, присутствующего на iOS 7.

Однако наиболее важным различием между alertView:clickedButtonAtIndex:, alertView:didDismissWithButtonIndex: и alertView:willDismissWithButtonIndex: является то, что первый метод (clickedButtonAtIndex:) вызывается только тогда, когда пользователь явно нажимает кнопку на ваше предупреждение (следовательно, "щелкнули" ).

Возможно ли, что предупреждение будет отклонено без нажатия кнопки? Да, вы могли бы программно скрыть представление предупреждения с помощью метода UIAlertView dismissWithClickedButtonIndex:animated:.

Итак, если вам нужно, чтобы какое-то поведение всегда срабатывало при увольнении представления предупреждения - было ли оно вызвано нажатием кнопки пользователем или запущено программно, - тогда использование didDismissWithButtonIndex: и willDismissWithButtonIndex: имеет больше смысла.