Почему dismissWithClickedButtonIndex никогда не вызывает clickedButtonAtIndex? - PullRequest
13 голосов
/ 17 декабря 2010

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

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

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

Все это работает, кроме одной вещи: вместо ОК пользователь может нажать DONE на клавиатуре. Я использую dismissWithClickedButtonIndex для имитации щелчка ОК ... но затем clickedButtonAtIndex никогда не вызывается.

Не должен ли dismissWithClickedButtonIndex также вызывать clickedButtonAtIndex?

Я пытаюсь получить clickedButtonAtIndex для вызова, если нажата кнопка ОТМЕНА, или ОК, или даже ВЫПОЛНЕНО.

Ответы [ 4 ]

37 голосов
/ 17 августа 2011

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

2 голосов
/ 22 июня 2012

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

0 голосов
/ 20 октября 2015

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

Мое решение: UIAlertView (Blocks) -> MYAlertView: UIAlertView

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

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

0 голосов
/ 17 декабря 2010

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

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

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

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

...