最近改了别的小伙伴自定义的键盘,所以今天咱们就来解剖下,三层 Window 中的 UITextEffectsWindow ,层级不多说直接上图吧。
第一张,键盘的效果图:
第二张,最底层的UITextEffectsWindow:
第三张,UITextEffectsWindow 上的 UIInputWindowController :
第四张,UIInputWindowController 上的 UIInputSetContainerView :
第五张,UIInputSetContainerView 上的 UIInputSetHostView :
那问题来了怎么寻找到这些层级呢?老样子直接上代码。
#pragma mark 获取键盘window的HostView
- (BOOL)haveTextEffectsWindowHostView{
UIWindow *keyboardWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
UIView *keyboardContainerView;
UIView *keyboardHostView;
for(int i = 0; i < [keyboardWindow.subviews count]; i++) {
keyboardContainerView = [keyboardWindow.subviews objectAtIndex:i];
UIViewController *nextResponder = (UIViewController*)[keyboardContainerView nextResponder];
//寻找keyboardWindow层的UIInputWindowController
if ([nextResponder isKindOfClass:NSClassFromString(@"UIInputWindowController")]) {
for(int y = 0; y < [nextResponder.view.subviews count]; y++) {
//寻找UIInputWindowController层的UIInputSetContainerView
if([[keyboardContainerView description] hasPrefix:@"<UIInputSetContainerView"] == YES){
for(int t = 0; t < [keyboardContainerView.subviews count]; t++) {
keyboardHostView = [keyboardContainerView.subviews objectAtIndex:y];
//寻找UIInputSetContainerView层的UIInputSetHostView
if([[keyboardHostView description] hasPrefix:@"<UIInputSetHostView"] == YES){
return YES;
}
}
}
}
}
}
return NO;
}
感谢观看,学以致用更感谢!