Модальный Просмотр Выпуск - PullRequest
4 голосов
/ 14 июня 2011

У меня проблема с некоторыми из моих представлений, вот краткое описание моей установки:

Tab Bar Controller
|
--View Controller 1
|
--View Controller 2
|
--View Controller 2

При определенном действии View Controller 1 отобразит модальное диалоговое окно. В этом диалоге, если пользователь выполняет другое действие, отображается другой модальный диалог, использующий первый модальный диалог для представления вида.

На втором ModalDialog у меня есть UITextField, однако, когда я пытаюсь ввести текст в поле, ничего не происходит. Даже если клавиатура отображается и вызывается метод textFieldDidBeginEditing. Я настроил UITextFieldDelegate и необходимые ответчики, но безрезультатно.

Кто-нибудь знает, что может вызвать эту проблему?

Большое спасибо

Ответы [ 4 ]

3 голосов
/ 18 июня 2011

Я обнаружил, что в некоторых случаях при смене представлений и всплывающих окон текстовые поля неправильно фокусировались на симптомах, которые вы описали. В этих случаях я в конечном итоге откладываю вызов becomeFirstResponder до тех пор, пока анимация не закончится или не загрузится представление - например, в методе контроллеров представления viewDidAppear.

Или просто отложите вызов на becomeFirstResponder с соответствующей оценкой времени, которое потребуется для изменения / анимации просмотров и т. Д., Например:

[textField performSelector:@selector(becomeFirstResponder)
                withObject:nil
                afterDelay:0.3];
1 голос
/ 17 июня 2011

Я бы попытался «связать» модальные диалоги из контроллера вида, если это возможно.

  • VC открывает 1-й модальный диалог
  • Ваш 1-й модальный диалог уведомляет VC(возможно, с использованием делегирования).
  • (Возможно, требуется) Закройте 1-е модальное диалоговое окно
  • ВК открывает 2-е модальное диалоговое окно
  • Счастье!
0 голосов
/ 21 июня 2011

На вашем месте я бы подумал о пересмотре навигационной иерархии.Модальные диалоги считаются достаточно плохими, но включение модального диалога в модальный диалог является самоубийством пользовательского интерфейса.Это вызывает замешательство у пользователя и очень нетрадиционно.Можно ли как-нибудь использовать первое модальное всплывающее окно и просто обмениваться контентом?

Примечание: вы упомянули настройку представления как UITextViewDelegate.Вы рассматривали как делегата текстовое поле?Вы возвращаете NO или FALSE из - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string?

0 голосов
/ 17 июня 2011

Я не уверен, что вы имеете в виду под "модальным диалогом" - я предполагаю, что вы имеете в виду либо модально представленный контроллер представления с UIModalPresentationFormSheet модальным стилем представления, либо UIPopoverController.

Вот мой лучший догадываюсь : я почти уверен, что ваш "модальный диалог" фиксирует все взаимодействия пользователя (по умолчанию). Таким образом, при нажатии на первый, он захватывает весь фокус ввода. При нажатии на второй, он захватывает конфликт с предыдущим, и, следовательно, клавиатура не будет работать.

В любом случае, оба типа «модальных диалогов» не предназначены для объединения в стек. Даже если это может сработать технически, мне не нравится, когда он формирует интерактивный дизайн. Вместо того, чтобы пытаться исправить ошибку или обойти ее, попробуйте переосмыслить модальный диалог. Вы можете поместить все в один. Например, используя контроллер навигации внутри этого представления, или заменяя представление или переворачивая его содержимое ... и т. Д.

Надеюсь, это поможет, Макс

...