UITextFieldのtext内容をUITextViewにどんどん追加していくということをやりたい時。
行数が増えても自動的にスクロールして一番下の行が表示されるようにしたい。
@interface MyViewController ()
@property (weak, nonatomic) IBOutlet UITextField *myTextField;
@property (weak, nonatomic) IBOutlet UITextView *myTextView;
@end
UITextViewのtextプロパティを変更する前に、scrollEnabledをNOにしておくところがポイントらしい。
あと、テキストの選択位置(カーソル位置?)にスクロールする機能もあるらしくて、その辺りの設定もしてあげると幸せになるっぽい。
よくわからないけど←
以下は@implementationの中身
- (void)viewDidAppear:(BOOL)animated
{
//予めテキストビューの選択位置を設定
NSString *viewText = _myTextView.text;
NSRange range;
range.location = [viewText length];
_myTextView.selectedRange = range;
}
- (void)makeMyText {
_myTextView.scrollEnabled = NO;
NSString *newText = _myTextField.text;
NSString *oldText = _myTextView.text;
NSString *modifiedText = [NSString stringWithFormat:@"%@%@n", oldText, newText];
_myTextView.text = modifiedText;
_myTextField.text = @"";
[self scrollText];
}
- (void)scrollText {
NSRange range;
range.location = [_myTextView.text length];
_myTextView.selectedRange = range;
_myTextView.scrollEnabled = YES;
CGFloat scrollY = _myTextView.contentSize.height + _myTextView.font.pointSize - _myTextView.bounds.size.height;
CGPoint scrollPoint;
if (scrollY < 0) {
scrollY = 0;
}
scrollPoint = CGPointMake(0.0, scrollY);
[_myTextView setContentOffset:scrollPoint animated:YES];
}
あとはテキスト送信時にmakeMyTextメソッドを呼べばOK。