it-swarm.com.de

Ändern Sie UITextField und UITextView Cursor/Caret Color

Ich frage mich, ob ich die Farbe des Cursors/der Einfügemarke in einer UITextField (und UITextView wenn dieselbe Antwort) in iOS ändern soll. Ich habe Antworten für die OSX-Entwicklung gesehen, aber nichts für iOS.

Ist das überhaupt möglich?

194
RileyE

Wenn Sie sich auf iOS 7+ konzentrieren, wurde dies wesentlich vereinfacht. Ändern Sie einfach die tintColor des Felds mit einem Cursor mit dem Darstellungs-Proxy. Das 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 einzelne UITextView:

Swift 3.0:

myTextField.tintColor = .black 

Ziel c

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

Mit iOS7 können Sie einfach tintColor des textFields ändern

43
Cap

Swift 3:

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

Hinweis: Diese Antwort ist veraltet und sollte nur für die Entwicklung vor iOS 7 verwendet werden. Weitere Antworten zu einer 1-Zeilen-Lösung mit dem Erscheinungsbild-Proxy in iOS 7.

Ich kam zu dieser Frage, nachdem ich in einem Projekt, an dem ich arbeitete, das gleiche Problem hatte.

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.

13
Dov
yourTextField.tintColor = [UIColor whiteColor];

Es funktioniert, wenn Sie es in Code setzen, 'cos irgendwie' color Auslöser macht es nicht im Interface Builder (Xcode 6.1.1). Es hat sich gut bewährt, ohne dass ein Aussehen-Proxy geändert werden muss.

11
David

Die Einstellung von tintColor für UITextField und UITextView funktioniert unterschiedlich . Während für UITextField Sie nach der Aktualisierung von tintColor keinen zusätzlichen Code aufrufen müssen, um die Farbe des Cursors zu ändern, müssen Sie für UITextView.

Nach dem Festlegen von tintColor für UITextView (es spielt keine Rolle in IB oder im Code), müssen Sie textView.tintColorDidChange() aufrufen, um sie anzuwenden (tatsächlich wird die Konfiguration der Textansicht an die Hierarchie der Unteransichten übergeben).

5
ilya

Das funktionierte für mich in Swift:

UITextField.tintColor = UIColor.blackColor()

Sie können dies auch im Storyboard festlegen: https://stackoverflow.com/a/18759577/3075340

4
Micro

Ein allgemeiner Ansatz wäre, die Farbe des UIView-Erscheinungsbilds einzustellen.

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

Sinnvoll, wenn Sie viele standardmäßige UI-Elemente verwenden.

3
arnekolja

Dies ist nur durch den Zugriff auf ein privates Eigentum möglich und kann daher dazu führen, dass eine Apple AppStore App abgelehnt wird.

werfen Sie einen Blick auf diese Stackoverflow-Frage

1
Max Ballo

Versuchen Sie, es arbeitet für mich.

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

Schnell 4

In viewDidLoad () rufen Sie einfach den Code auf:

CODE-PROBE

//txtVComplaint is a textView

txtVComplaint.tintColor = UIColor.white

txtVComplaint.tintColorDidChange()
0

Durgeshs Ansatz funktioniert.

Ich habe solche KVC-Lösungen auch oft verwendet ... Obwohl es scheinbar undokumentiert zu sein scheint, aber es funktioniert. Ehrlich gesagt, Sie verwenden hier keine privaten Methoden Nur die Key-Value-Codierung, die legal ist.

P.S. Gestern erschien meine neue App ohne Probleme mit diesem Ansatz im AppStore. Dies ist nicht der erste Fall, wenn ich KVC zum Ändern einiger schreibgeschützter Eigenschaften (wie navigatonBar) oder privater Ivars verwende.

0
malex

Ich denke, wenn Sie benutzerdefinierte Farben möchten, können Sie zum Ordner Assets.xcassets gehen, mit der rechten Maustaste klicken und New Color Set auswählen. Nachdem Sie die von Ihnen festgelegte Farbe erstellt haben, geben Sie ihr einen Namen, um sie wiederzuverwenden.

Und du kannst es einfach so benutzen:

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

0
rust

Für Interface Builder-Version mit Swift

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

Wenn die Variable UITextField von UISearchBar ist, rufen Sie zuerst die Variable textField von searchBar ab und wenden Sie dann die Eigenschaft tintColor an:

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