How can I add support for Chinese keyboard with UITextView
on iOS 7? Currently I'm using the following code. But it works correctly only for standard-sized keyboards. It resizes UITextView
only for the main keyboard without additional Chinese panel.
bool keyboardIsShown;
float keyboardDelta;
- (void)keyboardWillShow:(NSNotification*)aNotification {
if (!keyboardIsShown) {
keyboardIsShown = true;
NSDictionary* userInfo = [aNotification userInfo];
CGSize keyboardSize = [[userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
if (is_Landscape) {
keyboardSize = CGSizeMake(keyboardSize.height, keyboardSize.width);
}
keyboardSize.height -= tabBarController.tabBar.frame.size.height;
CGRect viewFrame = myUITextView.frame;
keyboardDelta = keyboardSize.height;
viewFrame.size.height -= keyboardDelta;
NSTimeInterval animationDuration;
UIViewAnimationCurve animationCurve;
[[userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] getValue:&animationCurve];
[[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] getValue:&animationDuration];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationCurve:animationCurve];
[UIView setAnimationDuration:animationDuration];
[myUITextView setFrame:viewFrame];
[UIView commitAnimations];
}
}
- (void)keyboardWillHide:(NSNotification*)aNotification {
keyboardIsShown = false;
CGRect viewFrame = editor.frame;
viewFrame.size.height += keyboardDelta;
NSDictionary* userInfo = [aNotification userInfo];
NSTimeInterval animationDuration;
UIViewAnimationCurve animationCurve;
[[userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] getValue:&animationCurve];
[[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] getValue:&animationDuration];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationCurve:animationCurve];
[UIView setAnimationDuration:animationDuration];
[myUITextView setFrame:viewFrame];
[UIView commitAnimations];
}
UITextView
only for the main keyboard without additional Chinese panel. – ForeignismkeyboardWillShow
notification when that bit is added, which breaks in your code because of theif (!keyboardIsShown)
test. You probably need to handle the case where the keyboard is already shown and you receive the notification again. A quick log or breakpoint in that method will confirm this. – Darby