Мне интересно об изменении цвета курсора / каретки в 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]];
Свифт 3:
UITextField.appearance().tintColor = UIColor.black
UITextView.appearance().tintColor = UIColor.black
Примечание. Этот ответ устарел и должен использоваться только для разработки до iOS 7. Посмотрите другие ответы для однострочного решения с использованием внешнего прокси в iOS 7.
Я пришел к этому вопросу после того, как столкнулся с той же проблемой в проекте, над которым работал.
Мне удалось создать решение, которое будет принято командой разработчиков AppStore, так как оно не использует существующие частные API.
Я создал элемент управления с именем DGTextField, который расширяет UITextField.
yourTextField.tintColor = [UIColor whiteColor];
Это работает, если вы установите его в коде, потому что каким-то образом триггер цвета не делает этого в Интерфейсном Разработчике (Xcode 6.1.1). Хорошо подходит без необходимости менять внешний вид прокси.
Настройка tintColor
для UITextField
и UITextView
работает по-другому. Пока UITextField
вам не нужно вызывать дополнительный код после обновления, tintColor
чтобы изменить цвет курсора, но UITextView
вам нужно.
Таким образом, после установки tintColor
для UITextView
(это не имеет значения в IB или в коде) вам нужно позвонить textView.tintColorDidChange()
, чтобы применить его (на самом деле он передаст конфигурацию текстового представления в иерархию подпредставлений).
Это сработало для меня в быстром:
UITextField.tintColor = UIColor.blackColor()
Вы также можете установить это в раскадровке: https://stackoverflow.com/a/18759577/3075340
Instance member 'tintcolor' cannot be used on type 'UITextField'
Более общим подходом было бы установить tintColor внешнего вида UIView.
UIColor *myColor = [UIColor purpleColor];
[[UIView appearance] setTintColor:myColor];
Имеет смысл, если вы используете много элементов пользовательского интерфейса по умолчанию.
[UIView appearance]
Это возможно только при доступе к частной собственности, что может привести к отклонению приложения Apple AppStore.
Подход Дургеша работает.
Я также использовал такие решения KVC много раз. Несмотря на это, кажется, без документов, но это работает. Честно говоря, здесь вы не используете никаких частных методов - только кодирование значения ключа, которое является законным.
PS Вчера мое новое приложение появилось в AppStore без проблем с таким подходом. И это не первый случай, когда я использую KVC при изменении некоторых свойств, доступных только для чтения (например, navatonBar) или частных иваров.
Для версии Interface Builder со Swift
@IBOutlet weak var tvValue: UITextView! {
didSet {
tvValue.tintColor = .black
}
}
Если UITextField
это from, UISearchBar
то сначала получите textField
from, searchBar
а затем примените tintColor
свойство:
let textFieldInsideSearchBar = searchBar.value(forKey: "searchField") as? UITextField
textFieldInsideSearchBar?.tintColor = UIColor.lightGray
Я думаю, что если вам нужны некоторые пользовательские цвета, вы можете перейти в Assets.xcassets
папку, щелкнуть правой кнопкой мыши и выбрать New Color Set
, как только вы создали свой цвет, который вы задали, дайте ему имя для повторного использования.
И вы можете использовать это так:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
UITextField.appearance().tintColor = UIColor(named: "YOUR-COLOR-NAME") #here
}
}
Протестировано на macOS 10.15 / iOS 13 / Swift 5
UITextField
, в том числе о том, как это сделать в Интерфейсном Разработчике, по адресу stackoverflow.com/a/18759577/1709587