Отключить мигающий курсор в UITextField? - PullRequest
28 голосов
/ 19 августа 2011

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

Ответы [ 10 ]

44 голосов
/ 18 февраля 2014

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

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

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

39 голосов
/ 21 марта 2013

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

- (CGRect)caretRectForPosition:(UITextPosition *)position {
    return CGRectZero;
}
32 голосов
/ 17 августа 2013

Надеюсь, это поможет вам.

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

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

В Swift: 2,3

self.textField.valueForKey("textInputTraits")?.setValue(UIColor.clearColor() , forKey:"insertionPointColor")
6 голосов
/ 07 июля 2012

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

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

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

2 голосов
/ 29 января 2016

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

image

1 голос
/ 15 ноября 2016

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

enter image description here

1 голос
/ 29 сентября 2011

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

-(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 BuilderotherField (тот, что с входным представлением datePicker) находится за dummyField (тот, который скрывает курсор).

0 голосов
/ 19 мая 2014

Вы можете добавить 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

Метод 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

0 голосов
/ 16 сентября 2013

Подход Баладжи работает.

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

Это резко отличается от [addNewCategoryTextField textInputTraits].

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

0 голосов
/ 01 января 2013

Мне показалось, что это решение проще всего реализовать.

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

.... UIViewController <UITextFieldDelegate>

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

[yourTextField resignFirstResponder];

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

...