Проблема, с которой я сталкиваюсь, заключается в том, что текст в UITextField исчезает при каждом нажатии клавиши на iOS. Эта проблема произошла в нескольких контроллерах представлений, но ранее я смог решить проблему, увеличив текстовое поле, предоставив ей больше места для рисования текста внутри.
Это решение не работает в этой конкретной ситуации. Я использую собственный шрифт для своего приложения, поэтому я использовал подкласс UITextField для текстовых полей, которые автоматически устанавливают пользовательский шрифт. Я попытался вернуться к основному UITextField, но это не решает проблему.
Я также пробовал комментировать методы делегатов, которые я реализовал в контроллере проблем, и это не решает мою проблему. Я действительно не знаю, что еще попробовать, поэтому я надеюсь, что кто-то другой может указать мне в правильном направлении. Вот что я обнаружил о своей проблеме до сих пор:
- Текст исчезает и снова появляется с каждым нажатием клавиши, хотя нажатие кнопки возврата не изменяет внешний вид/исчезновение текста (т.е. при нажатии на обратное пространство при видимом тексте текст обычно удаляется. Если нажатие в то время, когда текст скрытые, символы удаляются из текстового поля, но пользователь не видит, что происходит).
- Текст появляется внизу текстового поля, когда он виден, а текстовое поле является первым ответчиком
- Когда другое текстовое поле становится первым ответчиком, текст в проблемном текстовом поле будет правильно нарисован, центрирован по вертикали в текстовом поле и всегда будет виден.
- Создание текстового поля первого ответчика, когда он имеет текст в нем, уже приведет к перерисовке текста и появлению, как если бы он прокручивался вверх/вниз в текстовом поле. Текст будет поочерёдно центрироваться в текстовом поле и "прокручиваться" вниз, или быть выведенным из вида, и "прокручивать" вверх по представлению, опираясь на нижнюю часть текстового поля.
- Контроллер вида имеет проблемы только в одном из двух режимов, в котором он представлен. Он либо представлен как контроллер корневого представления UINavigationController, либо он помещается в текстовый стек UINavigationController, представленный в модальном режиме, в качестве третьего контроллера навигации просмотрите контроллер. В первом случае, когда он является контроллером корневого представления, текстовые поля работают отлично и не проявляют ничего странного поведения, описанного выше. Странное поведение происходит во втором случае.
Хороший пример этой проблемы можно увидеть в видео, опубликованном в этом аналогичном вопросе: Текст UITextField исчезает при каждом нажатии клавиши. Ответы на сам вопрос не полезны и не решают моих проблем.
ИЗМЕНИТЬ
Мне удалось воспроизвести проблему, с которой я столкнулся раньше. Оказывается, проблема была вызвана добавлением подсмотра в представление контроллера навигации, а затем его удаление, когда UITextField был в фокусе. Если субвью удаляется, пока UITextField не редактируется, ошибка не будет возникать.
В моем случае загрузочное изображение было добавлено в качестве подсмотра навигационному контроллеру во время сетевого вызова и удалено после завершения указанного вызова. За это время будет активирован UITextField, что приведет к тому, что выше будет описан визуальный баг.
Я воссоздал ошибку в автономном примере проекта, который я загрузил здесь: https://www.dropbox.com/s/s4kc05vg1pwteeo/Funky%20TextField%20Tester.zip. Также обратите внимание, что если вы сообщите textField, чтобы он стал первым ответчиком в реализации viewDidLoad для контроллера вида, эта ошибка будет происходить прямо в начале и сохраняется.
НОВЫЙ ВОПРОС
Мне легко просто избегать размещения представления загрузки в представлении диспетчера навигации, но это дает мне хороший эффект, когда загрузочное представление "плавает" в одной и той же позиции на экране, тогда как его вводят в view view контроллера на стеке nav поднимает кучу визуальных проблем (перемещение позиции просмотра загрузки, когда контроллер представления помещается в стек, загрузочный вид затенен другими контроллерами представлений и т.д.).
Есть ли способ воспроизвести такой вид, не помещая представление в представление контроллера навигации или, возможно, безопасный способ поместить его в представление контроллера навигации, не выполняя странные обходные пути, такие как остановка редактирования на всех UITextFields в течение времени представление подзаголовка?