Я выполнил инструкции здесь и успешно настроил UITextField, который обновляется с помощью UIDatePicker. Однако курсор в UITextField мигает, что мне кажется немного неудобным. Есть ли решение избавиться от этого курсора?
Отключить мигающий курсор в UITextField?
Ответы (10)
Я понимаю, что это старый вопрос, но с обновлениями iOS 7 теперь можно скрыть курсор, выполнив следующие действия:
[[self textFieldName] setTintColor:[UIColor clearColor]];
Однако он будет работать только на iOS 7+.
Подкласс UITextfield и переопределите метод - (CGRect)caretRectForPosition:(UITextPosition *)position
и верните CGRectZero
.
- (CGRect)caretRectForPosition:(UITextPosition *)position {
return CGRectZero;
}
Я надеюсь, что это будет полезно для вас.
Установите курсор UIColor -> Пусто.
[[self.textField valueForKey:@"textInputTraits"] setValue:[UIColor clearColor] forKey:@"insertionPointColor"];
В Свифте: 2.3
self.textField.valueForKey("textInputTraits")?.setValue(UIColor.clearColor() , forKey:"insertionPointColor")
Я не мог заставить работать решение jcm. В итоге я создал подкласс UILabel, чтобы имитировать интерактивную функциональность UITextField без частей, которые мне не нужны (например, курсор). Я написал сообщение в блоге об этом здесь:
http://pietrorea.com/2012/07/how-to-hide-the-cursor-in-a-uitextfield/
По сути, подкласс UILabel должен перезаписать isUserInteractionEnabled, inputView, inputViewAccessory и canBecomeFirstResponder. Это всего несколько строк кода, и это имеет больше смысла.
Совершенно глупый хак, но если вы установите цвет оттенка текстового поля в разделе UIView
инспектора свойств Interface Builder, чтобы он соответствовал цвету фона, курсор станет невидимым:
Что я сделал, так это наложил другой 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 (тот, который скрывает курсор).
Я нашел это решение самым простым в реализации.
Убедитесь, что вы определили UITextFieldDelegate в вашем файле .h:
.... UIViewController <UITextFieldDelegate>
В вашем файле .m добавьте это к методу, который вы вызываете для средства выбора даты:
[yourTextField resignFirstResponder];
Это предотвратит мигание текстового поля.
Подход Баладжи действительно работает.
Я также много раз использовал такие решения KVC. Несмотря на то, что он кажется недокументированным, но он работает. Честно говоря, вы не используете здесь никаких частных методов - только кодирование ключ-значение, которое является законным.
Он кардинально отличается от [addNewCategoryTextField textInputTraits].
P.S. Вчера мое новое приложение появилось в AppStore без проблем с таким подходом. И это не первый случай, когда я использую KVC для изменения некоторых свойств только для чтения (например, navigatonBar) или приватных иваров.
Вы можете добавить свойство 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