2009-05-14 14 views

Odpowiedz

1

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ść.

+0

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

+0

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ą. –

0

Nie wiem, czy jest na to wbudowany sposób ... może mógłbyś podklasować UITextField i sam poradzić sobie z wydarzeniami dotykowymi?

0

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.

1

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

+0

Xcode mówi mi, że UITextField "nie ma kolekcji outlet" dla rozpoznawania gestów. – radven

6

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]; 
} 
+0

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

1

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.