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