Я не уверен, что SDK изменился так, что ответ @ ppaulojr больше не работает, или я просто странно настроил что-то в своей системе, но с помощью следующих настроек я смог заставить его работать!
Сообщения, связанные в ответе @ ppaulojr, великолепны (http://www.iphonedevsdk.com/forum/iphone-sdk-development/6573-howto-customize-uikeyboard.html и http://www.iphonedevsdk.com/forum/iphone-sdk-development/6275-add-toolbar-top-keyboard.html),, и они помогли мне заставить это работать.
Видимо, фактический вид клавиатурытеперь встроен как подпредставление в какую-то более грандиозную структуру представления UIKeyboard, поэтому требуется немного рекурсии. Я получил это на работу:
-(void) findKeyboard {
NSArray* windows = [[UIApplication sharedApplication] windows];
for (int i = 0; i < [windows count]; i++) {
UIWindow* tempWindow = [[[UIApplication sharedApplication] windows]
objectAtIndex:i];
for(UIView *subView in [tempWindow subviews])
{
[self checkViews:subView];
}
}
}
-(void)checkViews:(UIView *)inView
{
for(UIView *keyboard in inView.subviews)
{
NSLog( @"ViewName: %@", [keyboard description] ); // Which view are we looking at
//Check to see if the className of the view we have
//referenced is "UIKeyboard" if so then we found
//the keyboard view that we were looking for
if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES)
{
// Keyboard is now a UIView reference to the
// UIKeyboard we want. From here we can add a subview
// to th keyboard like a new button
//Do what ever you want to do to your keyboard here...
break;
}
// Recurse if not found
[self checkViews:subView];
}
}
Я также обнаружил, что лучшее место для вызова этой функции - -(void)textViewDidBeginEditing:(UITextView *)textView
например, так:
- (void)textViewDidBeginEditing:(UITextView *)textView {
NSLog(@"textViewDidBeginEditing");
[self findKeyboard];
}
При этом вносятся изменения в клавиатуру, как только клавиатура добавляется в окно, но до ее фактического отображения, так что все время, когда она поднимается снизу, будетмодифицировано.