Non sono sicuro che l'SDK sia cambiato in modo tale che la risposta di @ppaulojr non funzioni più, o se ho semplicemente impostato stranamente le cose sul mio sistema, ma con le seguenti modifiche sono riuscito a farlo funzionare!
I post collegati nella risposta di @ ppaulojr sono fantastici (http://www.iphonedevsdk.com/forum/iphone-sdk-development/6573-howto-customize-uikeyboard.html e http://www.iphonedevsdk.com/forum/iphone-sdk-development/6275-add-toolbar-top-keyboard.html) e mi hanno aiutato a farlo funzionare.
Apparentemente la vista da tastiera attuale è ora incorporata come sottoscheda in una struttura di visualizzazione UIKeyboard più grande, quindi è implicata una ricorsione. Ho avuto questo lavoro:
-(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];
}
}
Ho anche scoperto che il posto migliore per chiamare questa funzione è da -(void)textViewDidBeginEditing:(UITextView *)textView
in questo modo:
- (void)textViewDidBeginEditing:(UITextView *)textView {
NSLog(@"textViewDidBeginEditing");
[self findKeyboard];
}
Questo non fa le modifiche della tastiera non appena la tastiera viene aggiunto la finestra, ma prima che si presenti effettivamente, in modo che tutto il tempo che si alza dal basso, sarà stato modificato.
Grazie! Dovrò dare un'occhiata a questo. Venendo da uno sfondo Java e C/C++, a volte il modo in cui Objective-C fa le cose sembra un po ', beh, strano. – alownx