it-swarm.com.ru

Изменить UITextField и UITextView курсор/цвет каретки

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

Это вообще возможно?

194
RileyE

Если вы ориентируетесь на iOS 7+, это стало намного проще. Просто измените tintColor поля с помощью курсора, используя внешний прокси, и он будет применяться во всем приложении:

Swift 3.0:

UITextField.appearance().tintColor = .black 

Objective-C:

[[UITextField appearance] setTintColor:[UIColor blackColor]];

Тот же ответ применяется для отдельного UITextView:

Swift 3.0:

myTextField.tintColor = .black 

Objective-C

[myTextField setTintColor:[UIColor blackColor]];
461
DiscDev

С iOS7 вы можете просто изменить tintColor textField

43
Cap

Swift 3:

  UITextField.appearance().tintColor = UIColor.black
  UITextView.appearance().tintColor = UIColor.black
17
Peter Kreinz

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

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

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

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

13
Dov
yourTextField.tintColor = [UIColor whiteColor];

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

11
David

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

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

5
ilya

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

UITextField.tintColor = UIColor.blackColor()

Вы также можете установить это в раскадровке: https://stackoverflow.com/a/18759577/3075340

4
Micro

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

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

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

3
arnekolja

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

взгляните на этот вопрос Stackoverflow

1
Max Ballo

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

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

Swift 4

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

ОБРАЗЕЦ КОДА

//txtVComplaint is a textView

txtVComplaint.tintColor = UIColor.white

txtVComplaint.tintColorDidChange()
0
Md Shamshad Akhtar

Подход Дургеша работает.

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

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

0
malex

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

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

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

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