2010-11-14 15 views

Odpowiedz

8

Walczysz z systemem na tym. UITextField nie ma żadnych publicznych właściwości do ustawienia pozycji kursora (co faktycznie koreluje z początkiem bieżącego zaznaczenia). Jeśli zamiast tego można użyć wartości UITextView, następujące metody delegatów wymuszą przesunięcie kursora na początek tekstu. Pamiętaj, że użytkownicy nie oczekują takiego zachowania i powinieneś dokładnie sprawdzić swoje motywy, aby tego dokonać.

- (void)textViewDidBeginEditing:(UITextView *)textView { 
    shouldMoveCursor = YES; 
} 

- (void)textViewDidChangeSelection:(UITextView *)textView { 
    if(shouldMoveCursor) 
    { 
     NSRange beginningRange = NSMakeRange(0, 0); 
     NSRange currentRange = [textView selectedRange]; 
     if(!NSEqualRanges(beginningRange, currentRange)) 
      [textView setSelectedRange:beginningRange]; 
     shouldMoveCursor = NO; 
    } 
} 

Gdzie shouldMoveCursor jest BOOL zmienna utrzymać w kontrolerze.

+0

Hey warrenm, thaks kumpla. Ten kod to po prostu niesamowity człowiek. Czapki z głów dla ciebie. – anshul

19

UITextField jest zgodny z protokołem UITextInput, który zapewnia metody pozwalające kontrolować wybrany zakres. Działa to w moich testów:

-(void)textFieldDidBeginEditing:(UITextField *)textField { 
    textField.selectedTextRange = [textField 
     textRangeFromPosition:textField.beginningOfDocument 
     toPosition:textField.beginningOfDocument]; 
} 
+0

To rozwiązanie działa świetnie! Upewnij się, że zgadzasz się z protokołem delegowania UITextField. :) –

1

działa na mnie

// Get current selected range , this example assumes is an insertion point or empty selection 
UITextRange *selectedRange = [textField selectedTextRange]; 
// Calculate the new position, - for left and + for right 
UITextPosition *newPosition = [textField positionFromPosition:selectedRange.start offset:3]; 
// Construct a new range using the object that adopts the UITextInput, our textfield 
UITextRange *newRange = [textField textRangeFromPosition:newPosition toPosition:newPosition]; 
// Set new range 
[textField setSelectedTextRange:newRange];