web-dev-qa-db-ja.com

UITextViewは、textviewテキストにテキストを挿入します

UITextViewテキストオブジェクトにテキストをときどき挿入する必要があります。たとえば、ユーザーが[新しい段落]ボタンを押した場合、標準の単一の改行ではなく、二重の改行を挿入したいとします。

どうすればそのようなことに対処できますか? UITextViewから文字列を読み取り、変更して、書き戻す必要がありますか?次に、ポインタがどこにあるかをどのように知ることができますか?

ありがとう

15
John Smith

textUITextViewプロパティは不変なので、新しい文字列を作成し、textプロパティをそれに設定する必要があります。 NSStringにはインスタンスメソッド(-stringByAppendingString:)引数をレシーバーに追加して新しい文字列を作成します。

textView.text = [textView.text stringByAppendingString:@"\n\n"];
32
Martin Gordon

UITextviewにはinsertTextメソッドがあり、カーソルの位置が考慮されます。

- (void)insertText:(NSString *)text

例えば:

[myTextView insertText:@"\n\n"];
26
sudo

ここに私がそれをどのように実装したかがあり、それはうまく機能しているようです。

- (void) insertString: (NSString *) insertingString intoTextView: (UITextView *) textView  
{  
    NSRange range = textView.selectedRange;  
    NSString * firstHalfString = [textView.text substringToIndex:range.location];  
    NSString * secondHalfString = [textView.text substringFromIndex: range.location];  
    textView.scrollEnabled = NO;  // turn off scrolling or you'll get dizzy ... I promise  

    textView.text = [NSString stringWithFormat: @"%@%@%@",  
      firstHalfString,  
      insertingString,  
      secondHalfString];  
    range.location += [insertingString length];  
    textView.selectedRange = range;  
    textView.scrollEnabled = YES;  // turn scrolling back on.  

}
9
Brian Moncur

Swift 3.の場合

insertText InstanceのメソッドUITextViewを呼び出すことにより、テキストを追加できます。

例:

textView.insertText("yourText")
3
Parth Adroja

正解です!

カーソル位置も正しいです。

スクロール位置も正しいです。

- (void) insertString: (NSString *) insertingString intoTextView: (UITextView *) textView
{
    [textView replaceRange:textView.selectedTextRange withText:insertingString];
}
2
hayakawatomoaki
- (void)insertStringAtCaret:(NSString*)string {
    UITextView *textView = self.contentCell.textView;

    NSRange selectedRange = textView.selectedRange;
    UITextRange *textRange = [textView textRangeFromPosition:textView.selectedTextRange.start toPosition:textView.selectedTextRange.start];

    [textView replaceRange:textRange withText:string];
    [textView setSelectedRange:NSMakeRange(selectedRange.location + 1, 0)];

    self.changesDetected = YES; // i analyze the undo manager in here to enabled/disable my undo/redo buttons
}
2
Brad Goss