No estoy seguro de si el SDK ha cambiado de forma tal que la respuesta de @ ppaulojr ya no funciona, o si simplemente tengo cosas configuradas extrañamente en mi sistema, pero con los siguientes ajustes pude hacerlo funcionar.
Las publicaciones vinculadas en la respuesta de @ppaulojr son geniales (http://www.iphonedevsdk.com/forum/iphone-sdk-development/6573-howto-customize-uikeyboard.html y http://www.iphonedevsdk.com/forum/iphone-sdk-development/6275-add-toolbar-top-keyboard.html), y me ayudaron a hacer que esto funcione.
Aparentemente, la vista actual del teclado ahora está incrustada como una subvista en alguna estructura de vista de UIKeyboard más grandiosa, por lo que se trata de un poco de recurrencia. Tengo que esto funcione:
-(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];
}
}
También encontré que el mejor lugar para llamar a esta función es de -(void)textViewDidBeginEditing:(UITextView *)textView
así:
- (void)textViewDidBeginEditing:(UITextView *)textView {
NSLog(@"textViewDidBeginEditing");
[self findKeyboard];
}
Esto hace las modificaciones de teclado tan pronto como se añade el teclado para la ventana, pero antes de que realmente aparezca, de modo que todo el tiempo que suba desde abajo, se habrá modificado.
¡Gracias! Tendré que echarle un vistazo a eso. Viniendo de un fondo Java y C/C++, a veces la forma en que Objective-C hace las cosas parece un poco, bueno, raro. – alownx