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

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

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

Ответ 1

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

Ответ 2

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

Ответ 3

Swift 3:

  UITextField.appearance().tintColor = UIColor.black
  UITextView.appearance().tintColor = UIColor.black

Ответ 4

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

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

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

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

Ответ 5

yourTextField.tintColor = [UIColor whiteColor];

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

Ответ 6

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

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

Ответ 7

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

UITextField.tintColor = UIColor.blackColor()

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

Ответ 8

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

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

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

Ответ 9

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

[[self.textField valueForKey:@"textInputTraits"] setValue:[UIColor redColor] strong textforKey:@"insertionPointColor"];

Ответ 10

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

fooobar.com/questions/40404/...

Ответ 11

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

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

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

Ответ 12

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

@IBOutlet weak var tvValue: UITextView! {
        didSet {
            tvValue.tintColor = .black
        }
    }

Ответ 13

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

let textFieldInsideSearchBar = searchBar.value(forKey: "searchField") as? UITextField
textFieldInsideSearchBar?.tintColor = UIColor.lightGray

Ответ 14

Swift 4

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

ОБРАЗЕЦ КОДА

//txtVComplaint is a textView

txtVComplaint.tintColor = UIColor.white

txtVComplaint.tintColorDidChange()