画面全体に表示されているUITextViewに文字列を入力していくとキーボードでカーソルが隠れてしまう現象が発生しますので、下記の方法で対応しました。
しかし、UITextViewに表示されいている文字列が10,000文字程度あると、キーボードをしまう際にカーソルがあった位置よりも200文字先が表示され、直前に入力した文字列が見えなくなってしまいます。
上記の問題にて解決策があれば教えて頂けると助かります。
下記に現象の例とキーボード表示・非表示時のコードを貼り付けておきます。
以上、よろしくお願い致します。
◆例
UITextView内の文字:10,000字
カーソル:600行目
編集終了後表示:650行目
↑
編集終了すると別の場所が表示されてしまう・・・
lang
1- (void)keyboardWillShow:(NSNotification *)notification 2{ 3 NSDictionary *info = [notification userInfo]; 4 CGRect beginrect = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue]; 5 CGRect endrect = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; 6 CGRect cbeginrect = [[self.textView superview] convertRect:beginrect toView:nil]; 7 CGRect cendrect = [[self.textView superview] convertRect:endrect toView:nil]; 8 CGRect frame = [self.textView frame]; 9 10 if (cbeginrect.size.height == cendrect.size.height) { 11 frame.size.height -= cbeginrect.size.height; 12 } 13 else { 14 frame.size.height -= (cendrect.size.height - cbeginrect.size.height); 15 } 16 [self.textView setFrame:frame]; 17} 18 19- (void)keyboardWillHide:(NSNotification *)notification 20{ 21 NSDictionary *info = [notification userInfo]; 22 CGRect beginrect = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue]; 23 CGRect cbeginrect = [[self.textView superview] convertRect:beginrect toView:nil]; 24 CGRect frame = [self.textView frame]; 25 frame.size.height += cbeginrect.size.height; 26 [self.textView setFrame:frame]; 27}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/10/23 13:55
2014/10/27 00:00