zoukankan      html  css  js  c++  java
  • IOS开发之自定义键盘

     本文转载至 http://blog.csdn.net/majiakun1/article/details/41242069

     

    实际开发过程中,会有自定义键盘的需求,比如,需要添加一个表情键盘。本文提供一种解决方法,思路就是通过获取系统键盘所在的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之上。然后,做自己想做的事情吧。

  • 相关阅读:
    POJ 3683 Priest John's Busiest Day (2-SAT+输出可行解)
    Codeforces #2B The least round way(DP)
    避免死锁的银行家算法C++程序实现
    源代码编译安装MySQL5.6.12具体过程
    Android 设计模式
    Java与设计模式-适配器模式
    Java和Flex整合报错(五)
    三层架构—再思考
    怎样让DBGrid在按住Shift点鼠标的同时能将连续范围的多行选中?
    找出你的短板
  • 原文地址:https://www.cnblogs.com/Camier-myNiuer/p/4398406.html
Copyright © 2011-2022 走看看