这个问题的原因是iOS26的键盘UI名字改为了UIKeyboardItemContainerView(实际上这个类也是继承UIInputSetHostView的,但是QMUI中是通过类名匹配的所以匹配不到了导致找不到键盘。。尴尬)直接看代码把
+ (UIView *)keyboardView {
UIView *inputSetHostView = [[UIApplication.sharedApplication.windows qmui_filterWithBlock:^BOOL(__kindof UIWindow * _Nonnull window) {
return [NSStringFromClass(window.class) isEqualToString:@"UIRemoteKeyboardWindow"];
}] qmui_compactMapWithBlock:^id _Nullable(__kindof UIWindow * _Nonnull window) {
return [self inputSetHostViewInWindow:window];
}].firstObject;
if (inputSetHostView) return inputSetHostView;
inputSetHostView = [[UIApplication.sharedApplication.windows qmui_filterWithBlock:^BOOL(__kindof UIWindow * _Nonnull window) {
return [NSStringFromClass(window.class) isEqualToString:@"UITextEffectsWindow"];
}] qmui_compactMapWithBlock:^id _Nullable(__kindof UIWindow * _Nonnull window) {
if (@available(iOS 26.0, *)) {
return [self inputSetHostViewInGlassWindow:window];
} else {
return [self inputSetHostViewInWindow:window];
}
}].firstObject;
return inputSetHostView;
}
+ (UIView *)inputSetHostViewInWindow:(UIWindow *)window {
UIView *result = [[window.subviews qmui_firstMatchWithBlock:^BOOL(__kindof UIView * _Nonnull subview) {
return [NSStringFromClass(subview.class) isEqualToString:@"UIInputSetContainerView"];
}].subviews qmui_firstMatchWithBlock:^BOOL(__kindof UIView * _Nonnull subview) {
return [NSStringFromClass(subview.class) isEqualToString:@"UIInputSetHostView"] && subview.subviews.count;
}];
return result;
}
+ (UIView *)inputSetHostViewInGlassWindow:(UIWindow *)window {
UIView *result = [[window.subviews qmui_firstMatchWithBlock:^BOOL(__kindof UIView * _Nonnull subview) {
return [NSStringFromClass(subview.class) isEqualToString:@"UITrackingWindowView"];
}].subviews qmui_firstMatchWithBlock:^BOOL(__kindof UIView * _Nonnull subview) {
return [NSStringFromClass(subview.class) isEqualToString:@"UIKeyboardItemContainerView"] && subview.subviews.count;
}];
return result;
}