Estou pensando em mudar a cor do cursor / cursor em um UITextField
(e UITextView
se é a mesma resposta) no iOS. Vi respostas para o desenvolvimento do OSX, mas nada para o iOS.
Isso é possível?
Estou pensando em mudar a cor do cursor / cursor em um UITextField
(e UITextView
se é a mesma resposta) no iOS. Vi respostas para o desenvolvimento do OSX, mas nada para o iOS.
Isso é possível?
Respostas:
Se você está segmentando o iOS 7 ou superior, isso ficou muito mais fácil. Basta alterar o tintColor
campo com um cursor usando o proxy de aparência e ele será aplicado em todo o aplicativo:
Swift 3.0:
UITextField.appearance().tintColor = .black
Objetivo-C:
[[UITextField appearance] setTintColor:[UIColor blackColor]];
A mesma resposta se aplica a um indivíduo UITextField
:
Swift 3.0:
myTextField.tintColor = .black
Objetivo-C
[myTextField setTintColor:[UIColor blackColor]];
Swift 3:
UITextField.appearance().tintColor = UIColor.black
UITextView.appearance().tintColor = UIColor.black
Nota: Esta resposta está desatualizada e deve ser usada apenas para o desenvolvimento anterior ao iOS 7. Veja outras respostas para uma solução de 1 linha usando o proxy de aparência no iOS 7.
Cheguei a essa pergunta depois de enfrentar o mesmo problema em um projeto em que estava trabalhando.
Consegui criar uma solução que será aceita pela equipe de revisão da AppStore, pois ela não usa APIs privadas existentes.
Eu criei um controle chamado DGTextField que estende o UITextField.
yourTextField.tintColor = [UIColor whiteColor];
Funciona se você o definir no código, porque, de alguma forma, o gatilho de cores não o faz no Interface Builder (Xcode 6.1.1). É adequado sem a necessidade de alterar nenhum proxy de aparência.
Configuração tintColor
para UITextField
e UITextView
funciona de forma diferente. Enquanto UITextField
você não precisar chamar um código adicional após a atualização tintColor
para alterar a cor do cursor, UITextView
é necessário.
Então, depois de definir tintColor
para UITextView
(não importa em IB ou em código) você precisa chamar textView.tintColorDidChange()
a fim de aplicá-lo (na verdade, ele vai passar de configuração de exibição de texto para baixo a sua hierarquia subviews).
Isso funcionou para mim rapidamente:
UITextField.tintColor = UIColor.blackColor()
Você também pode definir isso no storyboard: https://stackoverflow.com/a/18759577/3075340
Instance member 'tintcolor' cannot be used on type 'UITextField'
Uma abordagem mais geral seria definir a tintColor da aparência do UIView.
UIColor *myColor = [UIColor purpleColor];
[[UIView appearance] setTintColor:myColor];
Faz sentido se você estiver usando muitos elementos da interface do usuário padrão.
[UIView appearance]
Tente, está funcionando para mim.
[[self.textField valueForKey:@"textInputTraits"] setValue:[UIColor redColor] strong textforKey:@"insertionPointColor"];
Só é possível acessar uma propriedade privada e, portanto, pode causar uma rejeição do aplicativo Apple AppStore.
A abordagem de Durgesh funciona.
Eu também usei essas soluções KVC muitas vezes. Apesar de parecer indocumentado, mas funciona. Francamente, você não usa métodos particulares aqui - apenas a codificação de valor-chave que é legal.
PS Ontem, meu novo aplicativo apareceu na AppStore sem problemas com essa abordagem. E não é o primeiro caso em que uso o KVC na alteração de algumas propriedades somente leitura (como navigatonBar) ou ivars particulares.
Para a versão do Interface Builder com Swift
@IBOutlet weak var tvValue: UITextView! {
didSet {
tvValue.tintColor = .black
}
}
Se UITextField
for from UISearchBar
, primeiro obtenha o textField
from searchBar
e aplique a tintColor
propriedade:
let textFieldInsideSearchBar = searchBar.value(forKey: "searchField") as? UITextField
textFieldInsideSearchBar?.tintColor = UIColor.lightGray
Eu acho que se você quiser cores personalizadas, pode ir para a Assets.xcassets
pasta, clicar com o botão direito e selecionar New Color Set
, depois de criar a cor que definir, dê um nome para reutilizá-la.
E você pode usá-lo assim:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
UITextField.appearance().tintColor = UIColor(named: "YOUR-COLOR-NAME") #here
}
}
Testado no macOS 10.15 / iOS 13 / Swift 5
UITextField
, incluindo como fazer isso no Interface Builder, em stackoverflow.com/a/18759577/1709587