Czy istnieje sposób, aby uniemożliwić użytkownikowi przesunięcie kursora w UITextField? Chciałbym, żeby pozostał na końcu struny.Wyłączyć Lupę w UITextField
Odpowiedz
Nie można uniemożliwić przesuwania kursora. Można jednak zapobiec ich edycji tekstu z wyjątkiem na końcu poprzez wdrożenie metody w delegata pole tekstowe za
– textField:shouldChangeCharactersInRange:replacementString:
.
Edytuj: można również ustawić userInteractionEnabled
na NO
, aby użytkownik nie mógł dotknąć pola. Zadzwoń pod becomeFirstResponder
ręcznie, aby pole zostało skupione, ponieważ użytkownik nie może dotknąć, aby ustawić ostrość.
Nie wiem, czy jest na to wbudowany sposób ... może mógłbyś podklasować UITextField i sam poradzić sobie z wydarzeniami dotykowymi?
nie mam sprawdzić, czy można wyłączyć lupę, ale zalecany sposób selektywnie wyłączyć zachowanie edycji w UIResponder (a zatem UITextField) jest wdrożenie canPerformAction:withSender
z UIResponder
.
Zobacz UIResponder documentation.
Może, jeśli zwrócisz "NIE" dla zaznaczenia i wybierz Wszystkie czynności, możesz je wyłączyć.
Innym, bardziej brutalnym sposobem jest przechwycenie dowolnego zdarzenia dotykowego i zresetowanie kursora do końca.
Polecam sprawdzić właściwość gestRecognizers.
Znajdziesz ich wiele w tablicy i możesz albo usunąć je wszystkie, albo znaleźć te, które wyzwalają zdarzenie, które chcesz przechwycić i usunąć/zastąpić.
użyłem go usunąć kopiuj/wklej i powiększaniu funkcjonalności szklane z UITextField
Xcode mówi mi, że UITextField "nie ma kolekcji outlet" dla rozpoznawania gestów. – radven
jest to stara sprawa, ale szukałem odpowiedzi na to samo pytanie i znaleźć rozwiązanie.
W rzeczywistości bardzo proste jest uniemożliwienie użytkownikowi przesunięcia kursora. Wystarczy podklasę UITextField i podać następujące realizację caretRectForPosition:
- (CGRect)caretRectForPosition:(UITextPosition *)position
{
return [super caretRectForPosition:self.endOfDocument];
}
Chciałbym tylko dodać, że chociaż to rzeczywiście uniemożliwia poruszanie się karetki, to jednak nie wyłącza szkła powiększającego (przynajmniej nie w systemie iOS 7). Tytuł i pytanie wymagają różnych rzeczy. – iMaddin
NO PODKLASA potrzebne.
Możesz użyć UITextFieldDelegate
. Spowoduje to wyłączenie wyboru tekstu powiększającego.
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
textField.userInteractionEnabled = NO;
return YES;
}
- (void)textFieldDidEndEditing:(UITextField *)textField {
textField.userInteractionEnabled = YES;
}
NB: To tylko obejście.
To jest to, co mam teraz, ale jest trochę niewygodny dla użytkownika, gdy przesuwają kursor, a następnie wpisz klucz, a znaki dołączają do końca ciągu. Nie idealne ... ale nie śmiertelne. Poszukuje łatwego sposobu na wyłączenie dotknięć na UITextField. Może pójść na podklasę trasy, jeśli to moja jedyna opcja. – Meltemi
Czy mogę zapytać, co próbujesz osiągnąć? Dlaczego nie pozwolić na umieszczenie kursora? Ale tak, wydaje się, że po prostu ustawienie userInteractionEnabled = NO byłoby najlepszą poprawką. –