Я использую a UITextField
с a UIPickerView
вместо него inputView
, так что, когда пользователь нажимает на текстовое поле, вызывается средство выбора, из которого он может выбрать вариант.
Почти все работает, но у меня есть одна проблема: курсор все еще мигает в текстовом поле, когда он активен, что некрасиво и неуместно, поскольку пользователь не должен вводить данные в поле и не представлен с помощью клавиатуры. Я знаю, что мог бы решительно решить эту проблему, установив editing
для NO
него текстовое поле и отслеживая прикосновения к нему, или заменив его кнопкой с пользовательским стилем, и вызвав средство выбора с помощью кода. Однако я хочу использовать эти UITextFieldDelegate
методы для всей обработки событий в текстовом поле, и такие хаки, как замена текстового поля на кнопку, не допускают такой подход.
Как я могу просто спрятать курсор UITextField
вместо?
источник
Начиная с iOS 7, теперь вы можете просто установить
tintColor = [UIColor clearColor]
в textField, и курсор исчезнет.источник
caretRectForPosition:
переопределить решение.Вы можете просто очистить tintColor текстового поля
Swift 3.0
источник
Возможно, вы также захотите запретить пользователю выбирать, копировать или вставлять любой текст, чтобы единственный ввод текста происходил из представления выбора.
http://b2cloud.com.au/tutorial/disabling-the-caret-and-text-entry-in-uitextfields/
источник
Проверьте свойство
selectedTextRange
из протоколаUITextInput
, к которому классуUITextField
соответствует установленным требованиям. Несколько! Вот и урок объектно-ориентированного программирования.Скрыть каретку
Чтобы скрыть курсор, обнулите выделенный текстовый диапазон текстового поля.
Unhide Caret
Есть два способа показать курсор.
Установите выделенный текстовый диапазон текстового поля в конец документа.
Чтобы курсор оставался в том же месте, сначала сохраните выделенный текстовый диапазон текстового поля в переменной экземпляра.
Затем, когда вы хотите отобразить каретку, просто установите выделенный текстовый диапазон текстового поля обратно на то, что было изначально:
источник
caretRectForPosition
. Это более ясно, что он делает, и документы, которые вы процитировали, не проясняют, каким должно быть поведение курсора, когда нет «текущего выбора». Если бы утверждение @ ArtGeigel о том, что это не работает, было правильным (а это не так, по крайней мере, насколько я могу судить), не было бы ясно, что это была ошибка.Ответ предоставлен ОП, скопированный из тела вопроса, чтобы помочь очистить постоянно растущий хвост безответных вопросов.
Я нашел другое решение: создать подкласс
UIButton
и переопределить эти методыТеперь кнопка, как
UIResponder
, имеет то же поведение, чтоUITextField
и довольно простая реализация.источник
UITextFieldDelegate
с этим для обработки событий начала и конца редактирования. Вместо этого - если нет способа обработать те события, о которых я не знаю, - вам нужно переопределитьbecomeFirstResponder
иresignFirstResponder
в подклассе кнопки, и, возможно, создать свой собственный протокол делегата, добавитьdelegate
свойство и вызвать делегата из вышеупомянутого методы. Это гораздо больше, чем просто переопределениеcaretRectForPosition
вUITextField
подклассе.UIResponder
ссылку на класс и понятия не имел, что подобный трюк возможен.UITextField
и скрытие курсора, что, по сути, является хакерством, поскольку затем мы используем текстовое поле в качестве метки, пока не использовать какие-либо функцииUITextField
.Swift 5 версия сообщения Net
источник
установите tintColor на Clear Color
и вы также можете установить из конструктора интерфейса
источник
Если вы хотите скрыть курсор, вы можете легко использовать это! Это сработало для меня ..
источник
Ответ предоставлен ОП, скопированный из тела вопроса, чтобы помочь очистить постоянно растущий хвост безответных вопросов.
Я думаю, что у меня есть правильное решение, но если оно может быть улучшено, будет приветствоваться :) Хорошо, я сделал подкласс UITextField и переопределил метод, который возвращает CGRect для границ
Эта проблема? Текст не отображается, потому что прямоугольник равен нулю. Но я добавил UILabel в качестве подпредставления элемента управления и переопределил метод setText, поэтому, когда мы вводим текст, как обычно, текст текстового поля равен нулю и является меткой, которая показывает текст
С этим все работает как положено. Вы знаете, как его улучшить?
источник
Чтобы отключить курсор и меню, я использую подкласс с этими двумя методами:
источник
Я просто подкласс
UITextField
и переопределитьlayoutSubviews
следующим образом:Это грязный взлом, и в будущем он может потерпеть неудачу (в этот момент курсор снова станет видимым - ваше приложение не выйдет из строя), но он работает.
источник
Вы можете добавить
BOOL cursorless
свойствоUITextField
в категорию через связанные объекты.Затем используйте метод swizzling для
caretRectForPosition:
переключения между методом, который переключается междуCGRectZero
его значением по умолчаниюcursorless
.Это приводит к простому интерфейсу через выпадающую категорию. Это продемонстрировано в следующих файлах.
Просто вставьте их и получите преимущество этого простого интерфейса
UITextField
категория: https://github.com/rexmas/RexDK/blob/master/RexDK/UI/UITextField%2BRXCursorless.h https://github.com/rexmas/RexDK/blob/master/RexDK/UI/UITextField%2BRXCursorless .mМетод Swizzling: https://github.com/rexmas/RexDK/blob/master/RexDK/Foundation/NSObject%2BRXRuntimeAdditions.h https://github.com/rexmas/RexDK/blob/master/RexDK/Foundation/NSObject% 2BRXRuntimeAdditions.m
источник