Изменение UITextField и UITextView Cursor/Caret Color

Мне интересно изменить цвет курсора/каретки в UITextFieldUITextView, если это тот же ответ) в iOS. Я видел ответы на разработку OSX, но ничего для iOS.

Возможно ли это?

+205
источник поделиться
14 ответов

Если вы ориентируетесь на 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]];
+476
источник

С iOS7 вы можете просто изменить tintColor текстового поля

+43
источник

Swift 3:

  UITextField.appearance().tintColor = UIColor.black
  UITextView.appearance().tintColor = UIColor.black
+18
источник

Примечание. Этот ответ устарел и должен использоваться только для разработки до iOS 7. См. Другие ответы для 1-линейного решения с использованием прокси-сервера внешнего вида в iOS 7.

Я пришел к этому вопросу после того, как столкнулся с той же проблемой в проекте, над которым я работал.

Мне удалось создать решение, которое будет принято группой проверки AppStore, поскольку оно не использует никаких существующих частных API.

Я создал элемент управления под названием DGTextField, который расширяет UITextField.

+13
источник
yourTextField.tintColor = [UIColor whiteColor];

Он работает, если вы установите его в коде, потому что как-то цветовой триггер не делает этого в Interface Builder (Xcode 6.1.1). Он хорошо подходит, без необходимости изменять прокси-сервер внешнего вида.

+11
источник

Установка tintColor для UITextField и UITextView работает по-разному. В то время как для UITextField вам не нужно вызывать дополнительный код после обновления tintColor для изменения цвета курсора, но для UITextView вам нужно.

Поэтому после установки tintColor для UITextView (это не имеет значения в IB или в коде) вам нужно вызвать textView.tintColorDidChange(), чтобы применить его (на самом деле он передаст конфигурацию текстового представления в свою иерархию подпредставлений).

+6
источник

Это сработало для меня быстрым:

UITextField.tintColor = UIColor.blackColor()

Вы также можете установить это в раскадровке: fooobar.com/questions/40404/...

+4
источник

Более общий подход состоял бы в том, чтобы установить внешний вид UIView tintColor.

UIColor *myColor = [UIColor purpleColor];
[[UIView appearance] setTintColor:myColor];

Имеет смысл, если вы используете множество элементов интерфейса UI по умолчанию.

+3
источник

Попробуйте, он работает для меня.

[[self.textField valueForKey:@"textInputTraits"] setValue:[UIColor redColor] strong textforKey:@"insertionPointColor"];
+2
источник

Это возможно только при доступе к частному свойству и, следовательно, может привести к отклонению приложения Apple App Store.

fooobar.com/questions/40404/...

+1
источник

Подход Durgesh работает.

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

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

0
источник

Для версии Interface Builder со Swift

@IBOutlet weak var tvValue: UITextView! {
        didSet {
            tvValue.tintColor = .black
        }
    }
0
источник

Если UITextField из UISearchBar тогда сначала получите textField из searchBar а затем примените свойство tintColor:

let textFieldInsideSearchBar = searchBar.value(forKey: "searchField") as? UITextField
textFieldInsideSearchBar?.tintColor = UIColor.lightGray
0
источник

Swift 4

В viewDidLoad() просто позвоните ниже код:

ОБРАЗЕЦ КОДА

//txtVComplaint is a textView

txtVComplaint.tintColor = UIColor.white

txtVComplaint.tintColorDidChange()
0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос