Мені цікаво про зміну кольору курсора / карети в UITextField
(І UITextView
якщо це однакова відповідь) в iOS. Я бачив відповіді на розробку OSX, але нічого для iOS.
Це навіть можливо?
Мені цікаво про зміну кольору курсора / карети в UITextField
(І UITextView
якщо це однакова відповідь) в iOS. Я бачив відповіді на розробку OSX, але нічого для iOS.
Це навіть можливо?
Відповіді:
Якщо ви орієнтуєтесь на iOS 7+, це стало набагато простіше. Просто змініть tintColor
поле за допомогою курсору за допомогою проксі-сервера, і воно застосовуватиметься у всьому додатку:
Swift 3.0:
UITextField.appearance().tintColor = .black
Завдання-C:
[[UITextField appearance] setTintColor:[UIColor blackColor]];
Ця ж відповідь стосується фізичної особи UITextField
:
Swift 3.0:
myTextField.tintColor = .black
Ціль-С
[myTextField setTintColor:[UIColor blackColor]];
Швидкий 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
(не має значення в МБ або в коді) вам потрібно зателефонувати textView.tintColorDidChange()
, щоб застосувати його ( на насправді вона буде проходити конфиг Вид тексту вниз до його підвиди ієрархії).
Це працювало для мене швидко:
UITextField.tintColor = UIColor.blackColor()
Ви також можете встановити це в раскадровці: https://stackoverflow.com/a/18759577/3075340
Instance member 'tintcolor' cannot be used on type 'UITextField'
Більш загальним підходом було б встановлення кольору TIVColor у зовнішньому вигляді.
UIColor *myColor = [UIColor purpleColor];
[[UIView appearance] setTintColor:myColor];
Має сенс, якщо ви використовуєте багато елементів інтерфейсу за замовчуванням.
[UIView appearance]
Це можливо лише за допомогою доступу до приватної власності, і тому може спричинити відхилення програми Apple AppStore.
Підхід Дургеша справді працює.
Я також багато разів використовував такі рішення KVC. Незважаючи на те, що здається незадокументованим, але це працює. Відверто кажучи, ви тут не використовуєте жодних приватних методів - лише кодування Key-Value, яке є законним.
PS Вчора моя нова програма з’явилася в 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
Я думаю, що якщо вам потрібні певні кольори, ви можете перейти до 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
, зокрема про те, як це зробити в Interface Builder, за адресою stackoverflow.com/a/18759577/1709587