實際開發過程中,會有自定義鍵盤的需求,比如,需要添加一個表情鍵盤。本文提供一種解決方法,思路就是通過獲取系統鍵盤所在的view,然後自定義一個view覆蓋在系統鍵盤view上,接下來的事情就非常簡單了,就是在自定義的view裏做任何自己想做的事情。
這個方法的關鍵在於獲取系統鍵盤所在的view。要完成這個,需要監聽UIKeyboardDidShowNotification這個系統通知(注意:如果在UIKeyboardWillShowNotification這個系統通知裏處理是不會得到鍵盤所在view的)。代碼如下:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
keyboardDidShow函數實現:
- (void)keyboardDidShow:(NSNotification *)notification{
UIView *keyboardView = [self getKeyboardView];
}
關鍵函數getKeyboardView的實現,該函數返回鍵盤所在view:
- (UIView *)getKeyboardView{
UIView *result = nil;
NSArray *windowsArray = [UIApplication sharedApplication].windows;
for (UIView *tmpWindow in windowsArray) {
NSArray *viewArray = [tmpWindow subviews];
for (UIView *tmpView in viewArray) {
if ([[NSString stringWithUTF8String:object_getClassName(tmpView)] isEqualToString:@"UIPeripheralHostView"]) {
result = tmpView;
break;
}
}
if (result != nil) {
break;
}
}
return result;
}
下面的事情就簡單了,只要自定義一個view,並調用上面得到的keyboardView的addSubView函數,即可將自定義view覆蓋在鍵盤view之上。然後,做自己想做的事情吧。