2011-12-14 15 views
7

To wydaje się niemożliwe, ale być może ktoś inny miał taki sam problem.Potwierdź automatyczne wyświetlenie UITextview

Czy mogę automatycznie zaakceptować autouzupełnianie lub w jakiś sposób uzyskać sugerowane słowo, które się pojawi? Mój problem polega na tym, że przechwytuję klawisz powrotu/backspace, a następnie przełączam fokus na inny widok tekstowy. Po naciśnięciu enter/backspace, widok tekstowy zignoruje automatycznie sugerowane słowo. Wydaje się, że możliwe jest tylko zaakceptowanie autouzupełniania za pomocą spacji/kropki (i powrotu dla nowego wiersza). Z tym kodem:

- (BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range 
           replacementText:(NSString *)text { 
    NSRange textViewRange = [textView selectedRange]; 

    // Handle newrow and backspace. 
    if(([text length] == 0) && (textViewRange.location== 0) && textViewRange.length==0){ 
     // BACKSPACE KEYSTROKE 
     [delegate doSomethingWhenBackspace]; 
     return NO;  
    }else if ([text isEqualToString:@"\n"]){  
     // RETURN KEYSTROKE 
     [delegate doSomethingWhenReturn];  
     return NO;  
    } 

    return YES; 
} 

Próbowałem programowo dodać "spację" po naciśnięciu klawisza powrotu, ale to również ignoruje automatycznie uzupełniane słowo.

else if ([text isEqualToString:@"\n"]){ 
       // Tryin to accept autocomplete with no result. 
       textview.text = [textview.text stringByAppendingString:@" "]; 
      // RETURN KEYSTROKE 
      [delegate doSomethingWhenReturn];  
      return NO;  
     } 

Wszelkie sugestie?

Odpowiedz

-3

Miałem bardzo podobny problem, robiłem aplikację, która musiała przeczytać każdą literę w widoku tekstowym i mam problemy podczas wstawiania słów autouzupełniania, ponieważ zapisywał ją tak, jakby była jedną literą. można dodać każdy znak do tablicy, a następnie sprawdzić, czy którekolwiek z nich ma ponad 1 ciąg znaków. Lub można dodać każdy znak, który zostanie wprowadzony do tablicy, a następnie uruchomić coś podobnego

NSString *string = text; 
NSMutableArray *array = [NSMutableArray new]; 
for (int i=0; i<string.length; i++) { 
[array addObject:[string substringWithRange:NSMakeRange(i, 1)]]; 
} 

dodać każdy znak indywidualnie, przez porównanie dwóch tablic można było ustalić, czy Autokorekta została użyta iz Jakie słowo/s . Mam nadzieję, że to pomoże.

+0

To naprawdę straszny sposób, aby to osiągnąć. Zmień właściwości 'firstITsponder'' UITextView'/'UITextField', aby UIKit działał automatycznie. – cbowns

0

Dla backspace i przestrzeni u mogą korzystać z tego warunku

if ([[text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length]==0) 
{  
[delegate doSomethingWhenBackspace];  
return NO;  
} 
4

połączeń -resignFirstResponder (tj [textView resignFirstResponder]) na widoku tekstu lub pola tekstowego, które musi zaakceptować wyniki autouzupełniania: UIKit zmieni .text właściwość, aby uwzględnić tekst skorygowany automatycznie.

Jeśli chcesz zachować klawiaturę po pierwszym wyświetleniu, rezygnujesz z pierwszego ratownika, przekaż odpowiedzialność firstResponder na następny widok wprowadzania tekstu za pomocą [anotherTextView becomeFirstResponder].