Отключить мигающий курсор в UITextField?

Я выполнил инструкции здесь и успешно настроил UITextField, который обновляется с помощью UIDatePicker. Однако курсор в UITextField мигает, что мне кажется немного неудобным. Есть ли решение избавиться от этого курсора?


person Tobias Frischholz    schedule 19.08.2011    source источник


Ответы (10)


Я понимаю, что это старый вопрос, но с обновлениями iOS 7 теперь можно скрыть курсор, выполнив следующие действия:

[[self textFieldName] setTintColor:[UIColor clearColor]];

Однако он будет работать только на iOS 7+.

person Jamie Chapman    schedule 18.02.2014
comment
Beats swizzling, спасибо - person Adam Waite; 23.03.2015

Подкласс UITextfield и переопределите метод - (CGRect)caretRectForPosition:(UITextPosition *)position и верните CGRectZero.

- (CGRect)caretRectForPosition:(UITextPosition *)position {
    return CGRectZero;
}
person Pradeep Reddy Kypa    schedule 21.03.2013
comment
Это не работает с iOS 4.3. Протокол UITextInput адаптирован только для iOS 5 и выше. - person Dinesh Raja; 29.03.2013
comment
Это должен быть выбранный ответ. Это к делу и относится к конкретной части, которую мы хотим скрыть, а именно к каретке. Это лучшее решение из всех возможных. Спасибо. - person Art Geigel; 11.06.2013

Я надеюсь, что это будет полезно для вас.

Установите курсор UIColor -> Пусто.

 [[self.textField valueForKey:@"textInputTraits"] setValue:[UIColor clearColor] forKey:@"insertionPointColor"];

В Свифте: 2.3

self.textField.valueForKey("textInputTraits")?.setValue(UIColor.clearColor() , forKey:"insertionPointColor")
person Balaji G    schedule 17.08.2013
comment
Спасибо, это работает... : -) - person byJeevan; 09.04.2015
comment
Кто-нибудь знает быструю версию? - person Vinu David Jose; 24.03.2017
comment
Правильный ответ не должен использовать частные значения API. - person TheCodingArt; 07.05.2017

Я не мог заставить работать решение jcm. В итоге я создал подкласс UILabel, чтобы имитировать интерактивную функциональность UITextField без частей, которые мне не нужны (например, курсор). Я написал сообщение в блоге об этом здесь:

http://pietrorea.com/2012/07/how-to-hide-the-cursor-in-a-uitextfield/

По сути, подкласс UILabel должен перезаписать isUserInteractionEnabled, inputView, inputViewAccessory и canBecomeFirstResponder. Это всего несколько строк кода, и это имеет больше смысла.

person Pietro Rea    schedule 06.07.2012
comment
Недавно я добавил ваш класс PRLabel в свой проект... но я не знаю, что я сделал не так, он серьезно испортил индекс таблицы... я думаю, что когда отображается окно выбора, таблица прокручивается, но визуально не обновляется. .. у меня есть PRLabel в разделе 1 .. я касаюсь его, окно выбора показывает, что когда я касаюсь ячейки в разделе 0, он интерпретируется как раздел 1 .. - person raw3d; 18.04.2013

Совершенно глупый хак, но если вы установите цвет оттенка текстового поля в разделе UIView инспектора свойств Interface Builder, чтобы он соответствовал цвету фона, курсор станет невидимым:

person brandonscript    schedule 29.01.2016

Что я сделал, так это наложил другой UITextField поверх того, чей курсор я хотел скрыть. Затем в методе делегата textFieldShouldBeginEditing я установил другое текстовое поле, чтобы оно стало первым ответчиком, и вернуло НЕТ.

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    if (textField.tag==TAG_OF_DUMMY_TEXTFIELD) {
        [otherField becomeFirstResponder];
        return NO;
    }
    return YES;
}

И затем в методе выбора даты вызывается:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@YOUR_DATE_FORMAT];
dummyField.text = [dateFormatter stringFromDate:datePicker.date];

В Interface Builder otherField (тот, у которого есть представление ввода datePicker) находится за dummyField (тот, который скрывает курсор).

person jcm    schedule 29.09.2011

Не лучшее решение, но вы также можете установить непрозрачность цвета оттенка на 0%.

введите здесь описание изображения

person Wouter van Zuilen    schedule 15.11.2016

Я нашел это решение самым простым в реализации.

Убедитесь, что вы определили UITextFieldDelegate в вашем файле .h:

.... UIViewController <UITextFieldDelegate>

В вашем файле .m добавьте это к методу, который вы вызываете для средства выбора даты:

[yourTextField resignFirstResponder];

Это предотвратит мигание текстового поля.

person nimrod    schedule 01.01.2013

Подход Баладжи действительно работает.

Я также много раз использовал такие решения KVC. Несмотря на то, что он кажется недокументированным, но он работает. Честно говоря, вы не используете здесь никаких частных методов - только кодирование ключ-значение, которое является законным.

Он кардинально отличается от [addNewCategoryTextField textInputTraits].

P.S. Вчера мое новое приложение появилось в AppStore без проблем с таким подходом. И это не первый случай, когда я использую KVC для изменения некоторых свойств только для чтения (например, navigatonBar) или приватных иваров.

person malex    schedule 16.09.2013

Вы можете добавить свойство BOOL cursorless к UITextField в категории через связанные объекты.

@interface UITextField (Cursorless)

@property (nonatomic, assign) BOOL cursorless;

@end

Затем используйте метод 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

Переключение методов: https://github.com/rexmas/RexDK/blob/master/RexDK/Foundation/NSObject%2BRXRuntimeAdditions.h https://github.com/rexmas/RexDK/blob/master/RexDK/Foundation/NSObject%2BRXRuntimeAdditions.m

person Awesome-o    schedule 19.05.2014