Почему не вызывается функция clickWithClickedButtonIndex называть clickedButtonAtIndex?

http://iphonedevelopment.blogspot.com/2009/02/alert-view-with-prompt.html

Я использую этот код, чтобы заставить приложение iPhone отображать alertView с включенным UITextField и соответствующими кнопками CANCEL и OK.

Пользователь может ввести текст, нажать CANCEL или ОК... и я вижу текст, введенный пользователем... используя мой код внутри метода clickedButtonAtIndex.

Все работает, за исключением 1 вещи: вместо OK пользователь может нажать DONE на клавиатуре. Я использую функцию rejectWithClickedButtonIndex для имитации щелчка OK... но затем clickedButtonAtIndex никогда не вызывается.

Не следует отклонятьWithClickedButtonIndex также вызывает clickedButtonAtIndex?

Я пытаюсь получить clickedButtonAtIndex для вызова, если удалено CANCEL, или ОК, или даже DONE.

Ответы

Ответ 1

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

Ответ 2

clickedButtonAtIndex вызывается, когда пользователь нажимает кнопку. Нажатие кнопки может или не отменяет предупреждение. стандартные кнопки ОК/Отмена имеют эффект отклонения предупреждения при нажатии. Если щелчок переводит для отклонения или вызывается метод dismissWithClickedbuttonIndex, тогда вызывается DismissWithButtonIndex.

Ответ 3

Я не уверен, полностью ли я понимаю ваш вопрос, но вот моя попытка:

Во-первых, вам нужно удалить if (buttonIndex != [alertView cancelButtonIndex]) из примера. Это должно работать для кнопок OK и CANCEL.

Чтобы распознать клавишу DONE на клавиатуре, используйте - (BOOL)textFieldShouldReturn:(UITextField *)textField для UITextFieldDelegate. Здесь вы можете вызвать [textField resignFirstResponder], чтобы закрыть клавиатуру.

Кроме того, что вам делать в clickedButtonAtIndex? Не могли бы вы создать свой собственный метод и вызвать его, когда вам это нужно?

Ответ 4

У меня была такая же проблема с категорией UIAlertView (Blocks) UIAlertView-Blocks

Мое решение: UIAlertView (Блоки) → MYAlertView: UIAlertView

Иногда используется метод: - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex. Иногда он не вызывал.

Итак... Я пытался найти решение во многих источниках. Затем я создал подкласс UIAlertView с абсолютно одинаковым кодом. И моя проблема была решена. На самом деле это немного сложнее в использовании. Но не более этих навязчивых ошибок.