Zastanawiam się nad zmianą koloru kursora / karetki w UITextField
(i UITextView
jeśli to ta sama odpowiedź) w iOS. Widziałem odpowiedzi na rozwój OSX, ale nic na iOS.
Czy to w ogóle możliwe?
ios
colors
uitextfield
cursor
uitextview
RileyE
źródło
źródło
UITextField
, w tym jak to zrobić w Konstruktorze interfejsów, na stackoverflow.com/a/18759577/1709587Odpowiedzi:
Jeśli celujesz w iOS 7+, stało się to znacznie łatwiejsze. Wystarczy zmienić
tintColor
pole za pomocą kursora, używając proxy wyglądu, a będzie ono obowiązywać w całej aplikacji:Swift 3.0:
Cel C:
Ta sama odpowiedź dotyczy osoby
UITextField
:Swift 3.0:
Cel C
źródło
W systemie iOS7 możesz po prostu zmienić tintColor pola tekstowego
źródło
Swift 3:
źródło
Uwaga: ta odpowiedź jest nieaktualna i należy jej używać wyłącznie do programowania w wersji wcześniejszej niż iOS 7. Zobacz inne odpowiedzi na rozwiązanie 1-liniowe, używając proxy wyglądu w iOS 7.
Doszedłem do tego pytania, gdy napotkałem ten sam problem w projekcie, nad którym pracowałem.
Udało mi się stworzyć rozwiązanie, które zostanie zaakceptowane przez zespół recenzentów AppStore, ponieważ nie korzysta z żadnych istniejących prywatnych interfejsów API.
Utworzyłem formant o nazwie DGTextField, który rozszerza UITextField.
źródło
Działa, jeśli ustawisz go w kodzie, ponieważ w jakiś sposób wyzwalacz kolorów nie robi tego w Konstruktorze interfejsów (Xcode 6.1.1). Pasował dobrze bez potrzeby zmiany jakiegokolwiek wyglądu proxy.
źródło
Ustawienie
tintColor
dlaUITextField
iUITextView
działa inaczej. Podczas gdyUITextField
nie musisz wywoływać dodatkowego kodu po aktualizacji,tintColor
aby zmienić kolor kursora, aleUITextView
potrzebujesz.Więc po ustawieniu
tintColor
naUITextView
(nie ma znaczenia, w IB lub w kodzie) trzeba zadzwonićtextView.tintColorDidChange()
w celu jej zastosowania (właściwie to minie config widoku tekstu w dół hierarchii subviews).źródło
To zadziałało dla mnie szybko:
Możesz to również ustawić w serii ujęć: https://stackoverflow.com/a/18759577/3075340
źródło
Instance member 'tintcolor' cannot be used on type 'UITextField'
Bardziej ogólnym podejściem byłoby ustawienie tintColor wyglądu UIView.
Ma sens, jeśli używasz wielu domyślnych elementów interfejsu użytkownika.
źródło
[UIView appearance]
Spróbuj, działa na mnie.
źródło
Jest to możliwe tylko poprzez dostęp do własności prywatnej i dlatego może spowodować odrzucenie aplikacji Apple AppStore.
spójrz na to pytanie Stackoverflow
źródło
Podejście Durgesh działa.
Wiele razy korzystałem z takich rozwiązań KVC. Mimo, że wydaje się to nieudokumentowane, ale działa. Szczerze mówiąc, nie używasz tutaj żadnych prywatnych metod - tylko legalne kodowanie klucz-wartość.
PS Wczoraj moja nowa aplikacja pojawiła się w AppStore bez żadnych problemów z tym podejściem. I nie jest to pierwszy przypadek, gdy używam KVC do zmiany niektórych właściwości tylko do odczytu (takich jak navigatonBar) lub prywatnych ivarów.
źródło
Dla wersji Konstruktora interfejsów z Swift
źródło
Jeśli
UITextField
jest od,UISearchBar
najpierw pobierztextField
od,searchBar
a następnie zastosujtintColor
właściwość:źródło
Szybki 4
W viewDidLoad () wystarczy wywołać poniższy kod:
PRÓBKA KODU
źródło
Myślę, że jeśli chcesz jakieś niestandardowe kolory, możesz przejść do
Assets.xcassets
folderu, kliknąć prawym przyciskiem myszy i wybraćNew Color Set
, po utworzeniu ustawionego koloru, nadaj mu nazwę, aby go ponownie użyć.I możesz użyć tego w następujący sposób:
Testowane na macOS 10.15 / iOS 13 / Swift 5
źródło
Dla osób szukających odpowiednika w SwiftUI
Textfield
jest toaccentColor
:źródło