Mi chiedo di cambiare il colore del cursore / cursore in un UITextField
(e UITextView
se è la stessa risposta) in iOS. Ho visto le risposte per lo sviluppo di OSX, ma niente per iOS.
È possibile?
Mi chiedo di cambiare il colore del cursore / cursore in un UITextField
(e UITextView
se è la stessa risposta) in iOS. Ho visto le risposte per lo sviluppo di OSX, ma niente per iOS.
È possibile?
Risposte:
Se scegli come target iOS 7+, questo è stato reso molto più semplice. Basta cambiare il tintColor
campo con un cursore usando il proxy aspetto e si applicherà in tutta l'app:
Swift 3.0:
UITextField.appearance().tintColor = .black
Objective-C:
[[UITextField appearance] setTintColor:[UIColor blackColor]];
La stessa risposta vale per un individuo UITextField
:
Swift 3.0:
myTextField.tintColor = .black
Objective-C
[myTextField setTintColor:[UIColor blackColor]];
Swift 3:
UITextField.appearance().tintColor = UIColor.black
UITextView.appearance().tintColor = UIColor.black
Nota: questa risposta non è aggiornata e deve essere utilizzata solo per lo sviluppo precedente a iOS 7. Guarda le altre risposte per una soluzione a 1 riga usando il proxy aspetto in iOS 7.
Sono arrivato a questa domanda dopo aver affrontato lo stesso problema in un progetto a cui stavo lavorando.
Sono riuscito a creare una soluzione che verrà accettata dal team di revisione di AppStore in quanto non utilizza alcuna API privata esistente.
Ho creato un controllo chiamato DGTextField che estende UITextField.
yourTextField.tintColor = [UIColor whiteColor];
Funziona se lo imposti nel codice, perché in qualche modo il trigger di colore non lo fa in Interface Builder (Xcode 6.1.1). Si adattava bene senza la necessità di modificare alcun proxy aspetto.
Impostazione tintColor
per UITextField
e UITextView
funziona in modo diverso. Mentre per UITextField
te non è necessario chiamare un codice aggiuntivo dopo l'aggiornamento tintColor
per cambiare il colore del cursore, ma per UITextView
te è necessario.
Così, dopo aver impostato tintColor
per UITextView
(non importa in IB o in codice) è necessario chiamare textView.tintColorDidChange()
al fine di applicarlo (in realtà passerà di configurazione di vista del testo fino alla sua gerarchia subviews).
Questo ha funzionato per me rapidamente:
UITextField.tintColor = UIColor.blackColor()
Puoi anche impostare questo nello storyboard: https://stackoverflow.com/a/18759577/3075340
Instance member 'tintcolor' cannot be used on type 'UITextField'
Un approccio più generale sarebbe quello di impostare il colorColor dell'aspetto di UIView.
UIColor *myColor = [UIColor purpleColor];
[[UIView appearance] setTintColor:myColor];
Ha senso se stai usando molti elementi dell'interfaccia utente predefiniti.
[UIView appearance]
È possibile solo accedendo a una proprietà privata e pertanto può causare un rifiuto dell'app Apple AppStore.
L'approccio di Durgesh funziona.
Ho anche usato tali soluzioni KVC molte volte. Nonostante sembri non documentato, ma funziona. Francamente, non usi alcun metodo privato qui - solo la codifica di valori-chiave che è legale.
PS Ieri la mia nuova app è apparsa su AppStore senza problemi con questo approccio. E non è il primo caso in cui utilizzo KVC per modificare alcune proprietà di sola lettura (come navigatonBar) o ivar privati.
Per la versione di Interface Builder con Swift
@IBOutlet weak var tvValue: UITextView! {
didSet {
tvValue.tintColor = .black
}
}
Se il UITextField
è da UISearchBar
allora prima ottenere il textField
da searchBar
e quindi applicare la tintColor
proprietà:
let textFieldInsideSearchBar = searchBar.value(forKey: "searchField") as? UITextField
textFieldInsideSearchBar?.tintColor = UIColor.lightGray
Penso che se vuoi dei colori personalizzati puoi andare nella Assets.xcassets
cartella, fare clic con il tasto destro e selezionareNew Color Set
, una volta creato il colore che hai impostato, assegnagli un nome per riutilizzarlo.
E puoi usarlo così:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
UITextField.appearance().tintColor = UIColor(named: "YOUR-COLOR-NAME") #here
}
}
Testato su macOS 10.15 / iOS 13 / Swift 5
UITextField
, incluso come fare in Interface Builder, su stackoverflow.com/a/18759577/1709587