Почему не вызывается функция 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 с абсолютно одинаковым кодом. И моя проблема была решена. На самом деле это немного сложнее в использовании. Но не более этих навязчивых ошибок.