Tôi không chắc liệu SDK đã thay đổi sao cho câu trả lời của @ ppaulojr không còn hoạt động, hoặc nếu tôi có những thứ được thiết lập lạ trên hệ thống của mình, nhưng với các tinh chỉnh sau tôi có thể làm việc đó!
Các bài đăng được liên kết trong câu trả lời của @ ppaulojr rất tuyệt vời (http://www.iphonedevsdk.com/forum/iphone-sdk-development/6573-howto-customize-uikeyboard.html và http://www.iphonedevsdk.com/forum/iphone-sdk-development/6275-add-toolbar-top-keyboard.html) và chúng đã giúp tôi làm việc này.
Dường như chế độ xem bàn phím thực tế hiện được nhúng dưới dạng chế độ xem phụ trong một số cấu trúc khung nhìn UIKeyboard lớn hơn nên có một chút đệ quy. Tôi có này để làm việc:
-(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];
}
}
Tôi cũng phát hiện ra rằng nơi tốt nhất để gọi chức năng này là từ -(void)textViewDidBeginEditing:(UITextView *)textView
như vậy:
- (void)textViewDidBeginEditing:(UITextView *)textView {
NSLog(@"textViewDidBeginEditing");
[self findKeyboard];
}
này không những sửa đổi bàn phím ngay sau khi bàn phím được thêm vào cửa sổ, nhưng trước khi nó thực sự xuất hiện, để toàn bộ thời gian nó tăng từ phía dưới, nó sẽ bị sửa đổi.
Cảm ơn bạn! Tôi sẽ phải xem xét điều đó. Đến từ một nền Java và C/C++, đôi khi cách Objective-C thực hiện những điều có vẻ hơi, một chút, kỳ lạ. – alownx