2016-09-02 13 views
9

から単語を削除し、私はUITextView内の文字列を持っています。しかし、私が望むのは、いずれかの単語が@(例えば:@are)で始まり、その単語をタップしてバックスペースを押すと、単語全体(つまり、@are)が文字の代わりに削除されるはずです。プレフィックス '@'を持つ単語をタップすると(それは@areのように)強調表示され、backspaceを押すとその単語が削除される可能性はありますか?のiOSが思うUITextView

どうすればいいですか?

+0

はこれを試してみてください。http://stackoverflow.com/q/28822467/2603230 – Arefly

+0

質問が良い..です –

+0

あなたは、デフォルトの選択のポップアップを使用するか、プログラム的にやっているのだろうか? –

答えて

5

enter image description here

[OK]を私はそれとワーキング:) UITextViewdelegateを設定

- (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

私の回答を受け入れると助かりますので、同じ問題であれば他の人に有利になる –

+0

あなたの答えを受け入れました。 –

0

のためのソリューションを持っています。次のようにデリゲートメソッドを実装します -

- (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; 
} 
関連する問題