iOS应用开发中监听键盘事件的代码实例小结


1.注册监听键盘事件的通知

复制代码 代码如下:

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillShow:)
                                                 name:UIKeyboardWillShowNotification
                                               object:nil];
   
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardShow:)
                                                 name:UIKeyboardDidShowNotification
                                               object:nil];
   
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillHide:)
                                                 name:UIKeyboardWillHideNotification
                                               object:nil];
   
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardHide:)
                                                 name:UIKeyboardDidHideNotification
                                               object:nil];

2.在键盘将要出现和隐藏的回调中,加入动画

复制代码 代码如下:

- (void)keyboardWillShow:(NSNotification *)notif {
    if (self.hidden == YES) {
        return;
    }
   
    CGRect rect = [[notif.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
    CGFloat y = rect.origin.y;
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.25];
    NSArray *subviews = [self subviews];
    for (UIView *sub in subviews) {
       
        CGFloat maxY = CGRectGetMaxY(sub.frame);
        if (maxY > y - 2) {
            sub.center = CGPointMake(CGRectGetWidth(self.frame)/2.0, sub.center.y - maxY + y - 2);
        }
    }
    [UIView commitAnimations];
}

- (void)keyboardShow:(NSNotification *)notif {
    if (self.hidden == YES) {
        return;
    }
}

- (void)keyboardWillHide:(NSNotification *)notif {
    if (self.hidden == YES) {
        return;
    }
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.25];
    NSArray *subviews = [self subviews];
    for (UIView *sub in subviews) {
        if (sub.center.y < CGRectGetHeight(self.frame)/2.0) {
            sub.center = CGPointMake(CGRectGetWidth(self.frame)/2.0, CGRectGetHeight(self.frame)/2.0);
        }
    }
    [UIView commitAnimations];
}

- (void)keyboardHide:(NSNotification *)notif {
    if (self.hidden == YES) {
        return;
    }
}

3.监听键盘删除键之非代理实现
在UITextField 和 UITextView ,如何监听到删除键。

我看到网上都是用代理监听的,我觉得不靠谱。

其实苹果已经写的很清楚了。

就在他们实现的协议里面~~

复制代码 代码如下:

NS_CLASS_AVAILABLE_IOS(2_0) @interface UITextView : UIScrollView<UITextInput>
@protocol UITextInput<UIKeyInput>
@protocol UIKeyInput <UITextInputTraits>

- (BOOL)hasText;

- (void)insertText:(NSString *)text;

- (void)deleteBackward;

@end


写的非常清楚,一看就明白。

-deleteBackward 这个方法就是删除按钮监听。

只要自己写个子类,重写此方法就能监听。



相关阅读:
详解Linux系统中的SysVinit的机制
iOS中使用schema协议调用APP和使用iframe打开APP的例子
Html5 web本地存储实例详解
设置Linux系统文件权限
如何调整mac分辨率?苹果mac分辨率设置方法
PHP实现仿Google分页效果的分页函数
iOS模仿电子书首页实现书架布局样式
JS实现仿QQ面板的手风琴效果折叠菜单代码
PHP自带方法验证邮箱是否存在
PHP正则表达式过滤html标签属性(DEMO)
jquery ajax结合thinkphp的getjson实现跨域的方法
ThinkPHP使用心得分享-分页类Page的用法
如何调试异步加载页面里包含的js文件
JavaScript编程中实现对象封装特性的实例讲解
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 CMS SQL jQuery C# C++ java Android IOS oracle MongoDB PostgreSQL SQLite 交通频道 许昌-北京 玉林-六盘水 蓟县-南充 百色-长乐 阜阳-揭阳 海门-马鞍山 永康-铜仁 潍坊-玉溪 果洛-衡水 宿州-广元 葫芦岛-诸暨 白山-定西 盘锦-乐清 义乌-连云港 株洲-新郑 吴忠-安康 南京-运城 重庆-安康 临沂-白城 象山-梧州 鄂州-邵阳 七台河-乐清 福州-鄂州 靖江-扬中 亳州-攀枝花 济源-苍南 株洲-合肥 张家界-吉林 宜昌-汕尾 福州-扬州 丽水-中山 阿勒泰-廊坊 白城-衡水 吉安-眉山 萍乡-娄底 内江-东莞 荥阳-石嘴山 新泰-自贡 本溪-德宏 苍南-双鸭山 邯郸-青岛 汕头-张家港 烟台-庄河 石家庄-三门峡 牡丹江-乌鲁木齐 桓台-张掖 松原-景德镇 鄂州-白城 宜昌-那曲 常德-曲靖 福州-乳山 毕节-宁波 吉安-南通 漯河-葫芦岛 河池-大理 曲阜-章丘 防城港-白山 枣庄-阜新 桂林-洛阳 抚顺-招远 廊坊-温岭 克拉玛依-肇庆 三亚-青岛 崇左-武威 济宁-仪征 绥化-桂林 北京-聊城 阜阳-新泰 河源-九江 渭南-荆门 昌吉-焦作 铁岭-河源 南通-乐山 莱芜-东莞 岱山-肥城 潮州-渭南 三门峡-龙海 丹阳-景德镇 库尔勒-天水 商洛-无锡 宁陵县-长治 龙川-潢川 三源浦-松原 阳平关-徐州 高平-晋城 武夷山北-福州南 根河-大雁 奈曼-滦平 齐齐哈尔-绥棱 苏州园区-仙游 共青城-商洛 桂林北-宁波 白鸡坡-六盘水 太白-木竹河 曹家营子-黄家店 广南县-富宁 磁窑-十堰 枣庄-句容西 杨岗-平山 双城堡-金宝屯 银川-海宁 大埔-龙岩 阿里河-库都尔 衢州-衡山西 赤峰-东明村 皮山-阿克陶 余杭-南京南 沈阳北-苏北 柳江-乌鲁木齐南 保定-盘锦 汨罗-郯城 四平-哈达阳 西昌-乐山北 丹霞山-肇庆 赣州-青州市 岳阳-阜阳 韶关东-西平 杨陵-东莞东 合肥-蓝村 常德-丰城 鄂尔多斯-苏州 双牌-邹城 鸭园-氡泉 天津-台安 嘉祥-淄博 郑州-岳阳 石家庄-石门县北 南口-滦平 成都-宜宾 镇江-淮南东 成都东-安康 平安-平房 咸宁-全州南 南昌西-渭南北 辽阳-大虎山 交城-北京西 元氏-张家口南 饶平-巢湖东 曲靖北-高邑西 九三-海林 邵东-源潭 合肥-定陶 安顺西-北京西 兴国-大营镇 坪上-宿州 利川-瑞昌 南宁-肇庆东 玉门-和硕 攸县南-亳州 德州东-昌乐 江源-松江河 丽水-无锡东 涿州-渭南 南昌西-嵩明 新彦-团结 阳高-驻马店 葫芦岛-安仁 宝拉格-西里 新李-同心 白银哈尔-集宁南

Copyright © 2016 phpStudy |