2016-09-02 30 views
9

Przypuśćmy, że mam ciąg w UITextView czyli:iOS usunąć słowo z UITextView

NSString *str = @"Hello world. What @are you @doing ?" 

Kiedy dotknij tekstu, mogę usunąć znak po znaku. Ale czego chcę, to jeśli jakieś słowo zaczyna się od @ (jak: @), wtedy kiedy stukam w to słowo i wciskam backspace, całe słowo (tj. @are) powinno zostać usunięte zamiast znaku. Czy możliwe jest, że po dotknięciu dowolnego słowa, które ma prefiks "@" (np .: @), zostanie podświetlone i naciśnięcie klawisza Backspace spowoduje usunięcie tego słowa?

Jak mogę to zrobić?

+0

spróbuj tego: http://stackoverflow.com/q/28822467/2603230 – Arefly

+0

pytanie jest dobre .. –

+0

Będziesz pomocą okienko wyboru domyślnej czyli programowo? –

Odpowiedz

5

enter image description here

Ok mam rozwiązanie tego i pracy :)

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 

if ([string isEqualToString:@""]) { 

    UITextRange* selectedRange = [textField selectedTextRange]; 
    NSInteger cursorOffset = [textField offsetFromPosition:0 toPosition:selectedRange.start]; 
    NSString* text = textField.text; 
    NSString* substring = [text substringToIndex:cursorOffset]; 
    NSString* lastWord = [[substring componentsSeparatedByString:@" "] lastObject]; 

    if ([lastWord hasPrefix:@"@"]) { 
     // Delete word 

     textField.text = [[self.textField text] stringByReplacingOccurrencesOfString:lastWord withString:@""]; 
     return NO; 
    } 
} 
return YES; 
}// return 
+0

proszę przyjąć moją odpowiedź, jeśli to pomoże, aby inni mogli uzyskać przewagę, jeśli w tym samym numerze –

+0

zaakceptowałeś swoją odpowiedź. –

0

Ustawianie delegate od UITextView. Wdrożenie metody delegata w następujący sposób: -

- (BOOL)textView:(UITextView *)textView 
shouldChangeTextInRange:(NSRange)range 
replacementText:(NSString *)text{ 

    if([text isEqualToString:@""]){//means user pressed backspace 
     NSArray *arrayOfWords = [textView.text componentsSeparatedByString:@" "];// Separate all the words separated by space 
     NSString *lastWord = [arrayOfWords lastObject];// Get the last word (as we are working with backspace) 

     if([lastWord hasPrefix:@"@"]){ 
      textView.text = [textView.text stringByReplacingOccurrencesOfString:lastWord withString:@" "];//if last word starts with @, then replace it with space 
     } 
    } 

    return YES; 
}