Ich frage mich, ob ich die Farbe des Cursors / Carets in einem UITextField
(und UITextView
wenn es die gleiche Antwort ist) in iOS ändern soll . Ich habe Antworten für die OSX-Entwicklung gesehen, aber nichts für iOS.
Ist das überhaupt möglich?
Ich frage mich, ob ich die Farbe des Cursors / Carets in einem UITextField
(und UITextView
wenn es die gleiche Antwort ist) in iOS ändern soll . Ich habe Antworten für die OSX-Entwicklung gesehen, aber nichts für iOS.
Ist das überhaupt möglich?
Antworten:
Wenn Sie auf iOS 7+ abzielen, wurde dies erheblich vereinfacht. Ändern Sie einfach tintColor
das Feld mit einem Cursor mithilfe des Darstellungs-Proxys und es gilt für die gesamte App:
Swift 3.0:
UITextField.appearance().tintColor = .black
Ziel c:
[[UITextField appearance] setTintColor:[UIColor blackColor]];
Die gleiche Antwort gilt für eine Person UITextField
:
Swift 3.0:
myTextField.tintColor = .black
Ziel c
[myTextField setTintColor:[UIColor blackColor]];
Swift 3:
UITextField.appearance().tintColor = UIColor.black
UITextView.appearance().tintColor = UIColor.black
Hinweis: Diese Antwort ist veraltet und sollte nur für die Entwicklung vor iOS 7 verwendet werden. Weitere Antworten für eine 1-Zeilen-Lösung finden Sie unter dem Darstellungs-Proxy in iOS 7.
Ich kam zu dieser Frage, nachdem ich in einem Projekt, an dem ich arbeitete, auf dasselbe Problem gestoßen war.
Es ist mir gelungen, eine Lösung zu erstellen, die vom AppStore-Überprüfungsteam akzeptiert wird, da keine vorhandenen privaten APIs verwendet werden.
Ich habe ein Steuerelement namens DGTextField erstellt, das UITextField erweitert.
yourTextField.tintColor = [UIColor whiteColor];
Es funktioniert, wenn Sie es im Code festlegen, da der Farbauslöser dies im Interface Builder (Xcode 6.1.1) nicht tut . Es passte gut, ohne dass ein Erscheinungsbild-Proxy geändert werden musste.
Einstellung tintColor
für UITextField
und UITextView
funktioniert anders. Zwar müssen UITextField
Sie nach dem Update keinen zusätzlichen Code aufrufen, um die Cursorfarbe tintColor
zu ändern, aber UITextView
Sie müssen.
Nach der Einstellung tintColor
für UITextView
(es spielt keine Rolle in IB oder im Code) müssen Sie aufrufen, textView.tintColorDidChange()
um es anzuwenden (tatsächlich wird die Konfiguration der Textansicht an die Hierarchie der Unteransichten übergeben).
Das hat bei mir schnell geklappt:
UITextField.tintColor = UIColor.blackColor()
Sie können dies auch im Storyboard festlegen: https://stackoverflow.com/a/18759577/3075340
Instance member 'tintcolor' cannot be used on type 'UITextField'
Ein allgemeinerer Ansatz wäre, die tintColor des UIView-Erscheinungsbilds festzulegen.
UIColor *myColor = [UIColor purpleColor];
[[UIView appearance] setTintColor:myColor];
Sinnvoll, wenn Sie viele Standardelemente der Benutzeroberfläche verwenden.
[UIView appearance]
Versuchen Sie, es funktioniert für mich.
[[self.textField valueForKey:@"textInputTraits"] setValue:[UIColor redColor] strong textforKey:@"insertionPointColor"];
Dies ist nur durch Zugriff auf eine private Eigenschaft möglich und kann daher zu einer Ablehnung der Apple AppStore-App führen.
Durgeshs Ansatz funktioniert.
Ich habe solche KVC-Lösungen auch oft verwendet. Trotzdem scheint es undokumentiert zu sein, aber es funktioniert. Ehrlich gesagt verwenden Sie hier keine privaten Methoden - nur die legale Schlüsselwertcodierung.
PS Gestern erschien meine neue App im AppStore ohne Probleme mit diesem Ansatz. Und es ist nicht der erste Fall, wenn ich KVC zum Ändern einiger schreibgeschützter Eigenschaften (wie navigatonBar) oder privater ivars verwende.
Für die Interface Builder-Version mit Swift
@IBOutlet weak var tvValue: UITextView! {
didSet {
tvValue.tintColor = .black
}
}
Wenn das von UITextField
ist, UISearchBar
holen Sie zuerst das textField
von searchBar
und wenden Sie dann die tintColor
Eigenschaft an:
let textFieldInsideSearchBar = searchBar.value(forKey: "searchField") as? UITextField
textFieldInsideSearchBar?.tintColor = UIColor.lightGray
Ich denke, wenn Sie einige benutzerdefinierte Farben möchten, können Sie in den Assets.xcassets
Ordner gehen , mit der rechten Maustaste klicken und auswählen New Color Set
, nachdem Sie die von Ihnen festgelegte Farbe erstellt haben, geben Sie ihr einen Namen, um sie wiederzuverwenden.
Und Sie können es einfach so verwenden:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
UITextField.appearance().tintColor = UIColor(named: "YOUR-COLOR-NAME") #here
}
}
Getestet unter macOS 10.15 / iOS 13 / Swift 5
UITextField
, einschließlich der Vorgehensweise