首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS:如何访问`UIKeyboard`?

iOS:如何访问`UIKeyboard`?
EN

Stack Overflow用户
提问于 2011-06-24 00:10:26
回答 6查看 12.7K关注 0票数 7

我想在屏幕上得到一个指向键盘的UIKeyboard *keyboard的指针引用,这样我就可以添加一个透明的子视图,完全覆盖它,以达到disabling the UIKeyboard without hiding it的效果。

在这样做的时候,我可以假设屏幕上一次只有一个UIKeyboard吗?也就是说,它是单件的吗?[UIKeyboard sharedInstance]方法在哪里?如果你通过一个类别来实现这个方法,Brownie会给你加分。或者,如果你说服我为什么只假设一个键盘并给我一个更好的解决方案是一个坏主意,那么你会得到更多的点子。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-10-28 11:49:47

使用-[UIApplication beginIgnoringInteractionEvents]怎么样?

此外,获取包含键盘的视图的另一个技巧是使用CGRectZero初始化一个虚拟视图,并将其设置为UITextFieldUITextViewinputAccessoryView。然后,获取它的superview。尽管如此,这样的恶作剧是私人的/没有记录的,但我听说过应用程序这样做,并被接受。我的意思是,Instagram怎么能像Messages键盘那样让评论键盘具有交互性(滑动即可关闭)?

票数 5
EN

Stack Overflow用户

发布于 2011-06-24 00:35:30

试试这个:

代码语言:javascript
复制
// 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;
        }
    }
}   
票数 7
EN

Stack Overflow用户

发布于 2014-04-03 22:08:54

我发现developerdoug的答案在iOS 7上不起作用,但通过稍微修改一些东西,我设法获得了我需要的东西。下面是我使用的代码:

代码语言:javascript
复制
-(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中使用。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6457239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档