Мне интересно изменить цвет курсора/каретки в UITextField
(И UITextView
, если это тот же ответ) в iOS. Я видел ответы на разработку OSX, но ничего для iOS.
Возможно ли это?
Мне интересно изменить цвет курсора/каретки в UITextField
(И UITextView
, если это тот же ответ) в iOS. Я видел ответы на разработку OSX, но ничего для iOS.
Возможно ли это?
Если вы ориентируетесь на iOS 7+, это стало намного проще. Просто измените tintColor
поля с курсором, используя внешний прокси, и он будет применяться во всем приложении:
Swift 3.0:
UITextField.appearance().tintColor = .black
Objective-C:
[[UITextField appearance] setTintColor:[UIColor blackColor]];
Тот же ответ применяется для отдельного UITextField
:
Swift 3.0:
myTextField.tintColor = .black
Objective-C
[myTextField setTintColor:[UIColor blackColor]];
С iOS7 вы можете просто изменить tintColor текстового поля
Swift 3:
UITextField.appearance().tintColor = UIColor.black
UITextView.appearance().tintColor = UIColor.black
Примечание. Этот ответ устарел и должен использоваться только для разработки до iOS 7. См. Другие ответы для 1-линейного решения с использованием прокси-сервера внешнего вида в iOS 7.
Я пришел к этому вопросу после того, как столкнулся с той же проблемой в проекте, над которым я работал.
Мне удалось создать решение, которое будет принято группой проверки AppStore, поскольку оно не использует никаких существующих частных API.
Я создал элемент управления под названием DGTextField, который расширяет UITextField.
yourTextField.tintColor = [UIColor whiteColor];
Он работает, если вы установите его в коде, потому что как-то цветовой триггер не делает этого в Interface Builder (Xcode 6.1.1). Он хорошо подходит, без необходимости изменять прокси-сервер внешнего вида.
Установка tintColor
для UITextField
и UITextView
работает по-разному. В то время как для UITextField
вам не нужно вызывать дополнительный код после обновления tintColor
для изменения цвета курсора, но для UITextView
вам нужно.
Поэтому после установки tintColor
для UITextView
(это не имеет значения в IB или в коде) вам нужно вызвать textView.tintColorDidChange()
, чтобы применить его (на самом деле он передаст конфигурацию текстового представления в свою иерархию подпредставлений).
Это сработало для меня быстрым:
UITextField.tintColor = UIColor.blackColor()
Вы также можете установить это в раскадровке: fooobar.com/questions/40404/...
Более общий подход состоял бы в том, чтобы установить внешний вид UIView tintColor.
UIColor *myColor = [UIColor purpleColor];
[[UIView appearance] setTintColor:myColor];
Имеет смысл, если вы используете множество элементов интерфейса UI по умолчанию.
Попробуйте, он работает для меня.
[[self.textField valueForKey:@"textInputTraits"] setValue:[UIColor redColor] strong textforKey:@"insertionPointColor"];
Это возможно только при доступе к частному свойству и, следовательно, может привести к отклонению приложения Apple App Store.
Подход Durgesh работает.
Я также использовал такие решения KVC много раз. Несмотря на то, что это кажется недокументированным, но оно работает. Честно говоря, вы не используете частные методы здесь - только кодирование ключевого значения, которое является законным.
P.S. Вчера мое приложение появилось в AppStore без каких-либо проблем с этим подходом. И это не первый случай, когда я использую KVC при изменении некоторых свойств только для чтения (например, navigatonBar) или личных ivars.
Для версии Interface Builder со Swift
@IBOutlet weak var tvValue: UITextView! {
didSet {
tvValue.tintColor = .black
}
}
Если UITextField
из UISearchBar
тогда сначала получите textField
из searchBar
а затем примените свойство tintColor
:
let textFieldInsideSearchBar = searchBar.value(forKey: "searchField") as? UITextField
textFieldInsideSearchBar?.tintColor = UIColor.lightGray
Swift 4
В viewDidLoad() просто позвоните ниже код:
ОБРАЗЕЦ КОДА
//txtVComplaint is a textView
txtVComplaint.tintColor = UIColor.white
txtVComplaint.tintColorDidChange()