• iphone 自定义键盘(转)


    有一种思路叫寄生...

    我相信是懒人推动了世界的发展,既然iphone有了自己的软件盘,我们什么还要自己实现其功能呢。
    so,只要寄生在上面就行了。

    感谢alan转载的文章给的灵感。
    http://www.cocoachina.com/bbs/read.php?tid-3999.html

    思路:
    1.用静态方法找到应用程序当前view(window)中的UIKeyboard的view
    2.在键盘的view上帖上自己的view,(精彩了,这个自己的view就是你自己键盘,任意发挥,什么类型键盘都可以做了)
    3.根据需要调整系统键盘的大小以满足你想要的尺寸
    4.给自己的键盘view上的button添加方法,实现功能

    主要代码:
    添加自身类为键盘事件的观察者
    复制代码
    1. [[NSNotificationCenter defaultCenter] addObserver:self
    2.                                              selector:@selector(keyboardWillShow:)
    3.                                                  name:UIKeyboardWillShowNotification
    4.                                                object:nil];


    核心思路代码:
    复制代码

    1. - (void)keyboardWillShow:(NSNotification *)note
    2. {  
    3.     UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];//知识点
    4.     for(int i=0; i<[tempWindow.subviews count]; i++)
    5.     {
    6.         keyboard = [tempWindow.subviews objectAtIndex:i];
    7.         if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES)
    8.         {
    9.             [keyboard setFrame:CGRectMake(0, 460, 320, 345)];
    10.             [self congfigKeypad];
    11.             
    12.             [keyboard addSubview:keyPadView1];
    13.             
    14.         }
    15.     }
    16. }


    比如配置方法可以是这样:
    复制代码
    1. -(void)congfigKeypad
    2. {
    3.    SearBtn *one = [[SearBtn alloc] initWithFrame:CGRectMake(81, 3, kNumPadW, kNumPadH) index:1 ContextString:@"1" type:kNumPadType];
    4.     [one setImage:[UIImage imageNamed:@"1.png"] forState:UIControlStateNormal];
    5.     [one addTarget:self action:@selector(buttonClickAtIndex:) forControlEvents:UIControlEventTouchUpInside];
    6.         //......略
    7. }


    添加NSMutalbeString作为文本域字串的容器,点击button后append的button对应的字串。
    复制代码

    1. - (void)buttonClickAtIndex:(id)sender
    2. {
    3.     SearBtn *btnItem = (SearBtn*)sender;
    4.     NSString *str = btnItem->btnText;
    5.     [s_text appendString:str];
    6.     [sBar setText:s_text];
    7. }
    ;

    再实现一个deleteChar的方法作为退格键
    思路:
    复制代码
    1. if ([s_text length] > 0)
    2.     {
    3.         NSRange rang;
    4.         rang.location = [s_text length] - 1;
    5.         rang.length = 1;
    6.         [s_text deleteCharactersInRange:rang];
    7.     }


    现在点击各种文本域,应该就可以现实自己的键盘了。

    继续优化
    用textfield的代理方法控制键盘的字串类型,长度,和响应消失
    [ 此帖被evangel在2009-12-17 22:32重新编辑 ]
    图片:图片 1.png
    图片:图片 2.png

    http://www.cocoachina.com/bbs/read.php?tid-12429.html 

  • 相关阅读:
    RDP劫持:如何透明劫持RDS以及RemoteApp会话
    渗透测试工具备忘单
    Scrapy爬取慕课网(imooc)所有课程数据并存入MySQL数据库
    关于读取properties文件路径问题
    python随机生成测试数据用户名
    字典的应用(根据第一列,统计第二列之和)
    冒泡算法和排序算法运行速度比较
    判断日期天数
    Python爬虫抓取煎蛋(jandan.net)无聊图
    快递查询
  • 原文地址:https://www.cnblogs.com/likwo/p/1824817.html
Copyright © 2020-2023  润新知