2014-05-18 15 views
9

Próbuję ustawić kolor kursora dla UITextView na podstawie preferencji użytkownika. Wybierają kolor, który chcą za pomocą przycisku.UITextView Kursor Nie zmienia się kolor iOS 7

Domyślnie kolor kursora w tekście jest biały. Gdy użytkownik naciśnie przycisk, to może zmienić się na zielono:

[_textView setTintColor:[UIColor greenColor]]; 
    [_textView setTextColor:[UIColor greenColor]]; 

Jestem pewien, że ta metoda działa, ponieważ wezwanie tekst na TextView zmienia kolor, tylko nie kursorem ...

+0

Moje doświadczenie pokazuje, że wywołanie 'setTintColor:' zmienia kolor daszka widoku tekstowego. – rmaddy

+0

@rmaddy Myślę, że może to być błąd w iOS 7.1 dotyczący odcieni globalnych, takich jak [wygląd UIView], ponieważ nie ma nic, co robię, to coś niezwykłego. To powinno zadziałać ... – Apollo

+0

Z mojego doświadczenia (również w iOS7.1), rzeczywiście TintColor ustawia kolor kursora. –

Odpowiedz

20

Mogłem aby odtworzyć swoje zachowanie: jeśli zmienię zabarwienie i kolor tekstu, gdy widok tekstowy nie jest wybrany (vel: not first responder), wszystko będzie działać zgodnie z oczekiwaniami.

Ale jeśli najpierw go wybiorę, dotykając go, a następnie zmieniając kolor za pomocą przycisku, przyciski nie będą się zmieniać.

Oto obejście:

- (IBAction)changeColor:(id)sender 
{ 
    [_textView setTextColor:[UIColor greenColor]]; 
    [_textView setTintColor:[UIColor greenColor]]; 

    if([_textView isFirstResponder]){ 
     [_textView resignFirstResponder]; 
     [_textView becomeFirstResponder]; 
    } 
} 
+0

niesamowite. Nie wiem, jak to się tak szybko stało, ale w każdym razie dziękuję. – Apollo

+0

Wielkie niebiosa dziękuję! –

+2

Mam widoki, na które wpływają zmiany wyglądu klawiatury, a powyższe wywołania resign/be wywołają niepożądane zachowanie. Udało mi się to wyeliminować, zawijając wywołania: '[UIView setAnimationsEnabled: NO]; [_textView resignFirstResponder]; [_textView getFirstResponder]; [UIView setAnimationsEnabled: YES]; ' – Travis

3

Można użyć

[_textView reloadInputViews]; 

aw Swift

textView. reloadInputViews() 

Wtedy nie trzeba będzie obsługiwać klawiaturę przychodzące i odchodzą.

+0

Twoje rozwiązanie nie działa. – Boon

+0

Udało mi się to bardzo dobrze, 'resignFirstResponder' i' becomeFirstResponder' robił widok klawiatury i wracał. Czy mogę wiedzieć, w jaki sposób wdrażasz rozwiązanie i po co? –

+0

Zasadniczo ustawiam tintColor widoku tekstu, a następnie zrezygnuję z funkcji Wypełnianie zdania i staję się FirstResponder, a następnie wywołuję funkcję reloadInputViews. Animacja się nie dzieje, ale kursor nie zmienia koloru odcienia. – Boon

2

Używam małej siekać w metodzie UITextViewDelegate:

func textViewDidBeginEditing(_ textView: UITextView) { 
    let color = textView.tintColor 
    textView.tintColor = .clear 
    textView.tintColor = color 
} 
Powiązane problemy