Проблема с модальным представлением

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

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

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

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

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

Огромное спасибо


person Mick Walker    schedule 14.06.2011    source источник
comment
Может быть, покажите какой-нибудь код того, как вы показываете диалоги   -  person Eiko    schedule 17.06.2011
comment
Работает ли UITextField, если контроллер представлен немодальным образом, например, добавляя представление в keyWindow вашего UIApplication или просто нажимая его с помощью контроллера навигации?   -  person Felipe Sabino    schedule 17.06.2011
comment
Не совсем уверен в проблеме, но такая же проблема возникает для DDAlertPrompt (github.com/digdog/DDAlertPrompt) где текстовое поле добавляется внутри UIAlertView, и при нажатии клавиши он ничего не записывает внутри текста. Но разработчик этого проекта нашел здесь обходной путь - github.com/ digdog / DDAlertPrompt / blob / master / DDAlertPrompt.m Надеюсь, это поможет вам решить подобную проблему.   -  person Sagar    schedule 18.06.2011


Ответы (4)


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

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

[textField performSelector:@selector(becomeFirstResponder)
                withObject:nil
                afterDelay:0.3];
person Matt Connolly    schedule 18.06.2011

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

  • ВК открывает 1-й модальный диалог
  • Ваш 1-й модальный диалог уведомляет VC (возможно, с использованием делегирования).
  • (Может потребоваться) Закройте 1-й модальный диалог
  • ВК открывает 2-й модальный диалог
  • Счастье!
person jv42    schedule 17.06.2011

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

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

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

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

person Max Seelemann    schedule 17.06.2011
comment
UIPopoverControllers недоступны на iPhone, поэтому это исключает. - person fzwo; 17.06.2011
comment
Я должен согласиться с Максом, контроллеры модального представления не должны складываться с точки зрения человеческого интерфейса. Вы рассматривали элемент управления подкачкой? - person Wolfgang Schreurs; 17.06.2011

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

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

person FreeAsInBeer    schedule 21.06.2011