UITextViewでカーソル位置にて文字列を挿入する場合、いくつかの方法がありますが、下記方法がいろんなところで出回っているので、それを信じるを痛い目をみます。(私は痛い目を見ました。)
stackoverflowにも書いてあります。
http://stackoverflow.com/questions/2792589/uitextview-insert-text-in-the-textview-text/26016641
これは間違った例。こういうふうに「scrollEnabled = NO」するとiOS8ではスクロールがトップへ移動し、scrollEnabled = YESに戻してもスクロールできない現象になります。
- (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. }
↓正しくはこれ。[UITextView replaceRange:textView.selectedTextRange withText:insertingString]を使いましょう。
- (void) insertString: (NSString *) insertingString intoTextView: (UITextView *) textView { [textView replaceRange:textView.selectedTextRange withText:insertingString]; }
ではでは。
Please comment with your real name using good manners.