我想在屏幕上得到一个指向键盘的UIKeyboard *keyboard的指针引用,这样我就可以添加一个透明的子视图,完全覆盖它,以达到disabling the UIKeyboard without hiding it的效果。
在这样做的时候,我可以假设屏幕上一次只有一个UIKeyboard吗?也就是说,它是单件的吗?[UIKeyboard sharedInstance]方法在哪里?如果你通过一个类别来实现这个方法,Brownie会给你加分。或者,如果你说服我为什么只假设一个键盘并给我一个更好的解决方案是一个坏主意,那么你会得到更多的点子。
发布于 2013-10-28 11:49:47
使用-[UIApplication beginIgnoringInteractionEvents]怎么样?
此外,获取包含键盘的视图的另一个技巧是使用CGRectZero初始化一个虚拟视图,并将其设置为UITextField或UITextView的inputAccessoryView。然后,获取它的superview。尽管如此,这样的恶作剧是私人的/没有记录的,但我听说过应用程序这样做,并被接受。我的意思是,Instagram怎么能像Messages键盘那样让评论键盘具有交互性(滑动即可关闭)?
发布于 2011-06-24 00:35:30
试试这个:
// my func
- (void) findKeyboard {
// Locate non-UIWindow.
UIWindow *keyboardWindow = nil;
for (UIWindow *testWindow in [[UIApplication sharedApplication] windows]) {
if (![[testWindow class] isEqual:[UIWindow class]]) {
keyboardWindow = testWindow;
break;
}
}
// Locate UIKeyboard.
UIView *foundKeyboard = nil;
for (UIView *possibleKeyboard in [keyboardWindow subviews]) {
// iOS 4 sticks the UIKeyboard inside a UIPeripheralHostView.
if ([[possibleKeyboard description] hasPrefix:@"<UIPeripheralHostView"]) {
possibleKeyboard = [[possibleKeyboard subviews] objectAtIndex:0];
}
if ([[possibleKeyboard description] hasPrefix:@"<UIKeyboard"]) {
foundKeyboard = possibleKeyboard;
break;
}
}
} 发布于 2014-04-03 22:08:54
我发现developerdoug的答案在iOS 7上不起作用,但通过稍微修改一些东西,我设法获得了我需要的东西。下面是我使用的代码:
-(UIView*)findKeyboard
{
UIView *keyboard = nil;
for (UIWindow* window in [UIApplication sharedApplication].windows)
{
for (UIView *possibleKeyboard in window.subviews)
{
if ([[possibleKeyboard description] hasPrefix:@"<UIPeripheralHostView"])
{
keyboard = possibleKeyboard;
break;
}
}
}
return keyboard;
}据我所知,在iOS 7中,键盘由一个包含两个子视图的UIPeripheralHostView组成:一个UIKBInputBackdropView (提供键盘下面的任何东西的模糊效果)和一个UIKeyboardAutomatic (提供字符键)。操纵UIPeripheralHostView似乎等同于操纵整个键盘。
我不知道苹果是否会接受使用这种技术的应用程序,也不知道它是否还能在未来的SDK中使用。
https://stackoverflow.com/questions/6457239
复制相似问题