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