`

新风作浪博客学习(十九)在iOS虚拟键盘上添加动态隐藏按钮

    博客分类:
  • ios
ios 
阅读更多
为了给用户比较良好的交付,想在键盘上添加一个按钮,实时根据键盘不同高度变换按钮位置,再不做输入的时候点击按钮能够隐藏键盘,这种方式在很多软件上都有体现,然后在网上查阅了关于检测键盘高度一些相关知识,以下是一个Demo,代码有很多需要优化地方,仅供需要者参考;


先看效果:
[img]

[/img]

[img]

[/img]

[img]

[/img]

[img]

[/img]


首先是我们在ViewDidLoada()中注册了两个通知,[NSNotificationCenterdefaultCenter],检测键盘动态,一个是键盘将要弹出的时候,另一个是键盘将要退出时候键盘的信息
- (void)viewDidLoad
{
    NSLog(@"%@",NSStringFromSelector(_cmd));
    [super viewDidLoad];
	
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleKeyboardDidShow:) name:UIKeyboardWillShowNotification object:nil];  
    
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleKeyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
}



检测键盘消息一个六种,根据字面意思差不多都能说明函数作用

UIKeyboardWillShowNotification     通知将要发布时候显示键盘

UIKeyboardDidShowNotification     通知发布后立即显示键盘

UIKeyboardWillHideNotification       通知发布前撤销键盘

UIKeyboardDidHideNotification       通知发布后撤销键盘

UIKeyboardWillChangeFrameNotification      通知发布前迅速变化的框架的键盘。

UIKeyboardDidChangeFrameNotification      通知发布后立即改变在键盘的框架。




NSLog(@"%@",NSStringFromSelector(_cmd));是我特意加上去的,它能在控制台显示打印出当前程序所调用的函数,我在下面每个函数都加了这一句,当我进行不同操作的时候,打印出被调用函数名,在调试程序时候比较适用吧;
[img]

[/img]




注册消息通知后,实现通知所响应的方法:
- (void)handleKeyboardDidShow:(NSNotification *)notification 
{
    NSLog(@"%@",NSStringFromSelector(_cmd));
    NSDictionary *info = [notification userInfo];
    CGRect keyboardFrame;
    [[info objectForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardFrame];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey]CGRectValue].size;
    CGFloat distanceToMove = kbSize.height;
    NSLog(@"---->动态键盘高度:%f",distanceToMove);
    
    if (exitButton == nil) {
        exitButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        CGRect exitBtFrame = CGRectMake(self.view.frame.size.width-40, self.view.frame.size.height - distanceToMove, 40.0f, 30.0f);
        exitButton.frame = exitBtFrame;
        [exitButton setImage:[UIImage imageNamed:@"DoneDown.png"] forState:UIControlStateNormal];
        [self.view addSubview:exitButton];
        
    }
    exitButton.hidden=NO;
    
    [self adjustPanelsWithKeyBordHeight:distanceToMove];
    
    [exitButton addTarget:self action:@selector(CancelBackKeyboard:) forControlEvents:UIControlEventTouchDown];
    

}


在这个函数方法中值得探讨的是关于键盘所包含信息,因为每一次键盘弹出的时候也是动画形式弹出,他的坐标位置大小包含在userInfo的字典中,现在我用

NSLog(@"-->info:%@",info);打印出info对象,这些信息都可以在不同存储类型,取值的时候注意取值方式,此处只是提一提,希望以后有时间在做探讨,

[img]

[/img]




在这一段代码上,后面注释了5行,因为打算当键盘推出的时候,按钮从视图上移除,或者释放按钮,但是都导致了应用程序崩溃,后来就没有释放和移除操作了
- (void)handleKeyboardWillHide:(NSNotification *)notification 
{
    NSLog(@"%@",NSStringFromSelector(_cmd));
    if (exitButton.hidden==NO) {
        exitButton.hidden = YES;
    }
    
//    if (exitButton.superview) 
//    {
//        [exitButton removeFromSuperview];
//        [exitButton release];
//    }

    
}


-(void)adjustPanelsWithKeyBordHeight:(float) height
{
    NSLog(@"%@",NSStringFromSelector(_cmd));
    if (exitButton) {

       CGRect exitBtFrame = CGRectMake(self.view.frame.size.width - 40, self.view.frame.size.height - height-30, 40.0f, 30.0f);
        exitButton.frame = exitBtFrame;

        [self.view addSubview:exitButton];

    }
    
                        
//    UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
//    if (exitButton.superview == nil) 
//    {
//        [tempWindow addSubview:exitButton];
//        // 注意这里直接加到window上
//    }
    
}


-(void)CancelBackKeyboard:(id)sender
{
    NSLog(@"%@",NSStringFromSelector(_cmd));
    
    [textField resignFirstResponder];
    
}


- (void)viewDidUnload
{
    [self setTextField:nil];
    exitButton=nil;
    [super viewDidUnload];
    
    // Release any retained subviews of the main view.
}


- (void)dealloc {
    [textField release];
    [exitButton release];
    [[NSNotificationCenter defaultCenter] removeObserver:self];//移除所注册的通知
    [super dealloc];
}



源码:
  • 大小: 57.9 KB
  • 大小: 55.8 KB
  • 大小: 67.6 KB
  • 大小: 55.8 KB
  • 大小: 115.5 KB
  • 大小: 30.7 KB
分享到:
评论

相关推荐

    iOS开发中那些高效常用的宏 - 新风作浪的博客专栏 - 博客频道 - CSDN.NET1

    在iOS开发中,宏定义是Objective-C编程中一个非常实用的工具,它们可以用来简化代码、提高效率并增强代码的可读性。标题中的“iOS开发中那些高效常用的宏”指的是开发者在iOS应用开发过程中经常使用的宏定义,这些宏...

    新风系统APP

    ### 新风系统APP知识点解析 #### 一、新风系统APP概述 新风系统APP是一款专为造梦者新风系统设计的应用程序,旨在让用户能够通过智能手机远程控制和监控家中的新风系统设备。该应用支持安卓和苹果两种操作系统,...

    新风系统设计PPT学习教案.pptx

    本文依据“新风系统设计PPT学习教案”文件内容,详细阐述新风系统设计的关键知识点,包括新风量的确定、新风负荷的计算以及新风设备的选择与布置。 首先,新风量的确定是设计新风系统时的基础。它必须基于一定的...

    honeywell新风用户手册

    ### Honeywell智能家居新风系统知识点解析 #### 一、引言 Honeywell智能家居新风系统用户手册旨在为用户提供全面的操作指南和维护建议,确保用户能够充分利用该系统带来的诸多好处。本手册主要针对Honeywell的HR150...

    新风合同.pdf

    在商业活动中,合同是双方或多方在平等自愿基础上达成的,具有法律约束力的协议,是保障交易顺利进行的重要工具。本文将围绕“新风合同”这一特定主题,结合建筑、环境工程和室内空气质量改善领域,对可能出现在新风...

    新风系统简介PPT学习教案.pptx

    新风系统作为改善室内空气质量的设备,逐渐受到更多家庭和企业的青睐。它通过一定的物理原理和技术创新,实现室内空气的持续更新和过滤,为人们的居住和工作环境带来了健康和舒适。 新风系统的基本工作原理是通过...

    honeywell中央新风系统

    作为一家在技术和制造业上占世界领先地位的企业,霍尼韦尔在全球拥有12万名员工,并在纽约、伦敦和芝加哥的证券市场上有着“HON”的交易代码,同时也是“标准普尔500指数”的组成部分。 霍尼韦尔健康家居产品部的...

    专业新风系统资料PPT学习教案.pptx

    专业新风系统资料PPT学习教案.pptx

    大机房新风系统

    大机房新风系统原理介绍及说明 水膜新风系统 湿膜新风 水淋新风

    户内新风系统幻灯片.ppt

    在中国,新风系统虽未成为普遍标准,但近十年来,随着人们对空气质量问题的关注度提高,新风系统开始被引入并逐渐应用于各种建筑中。 新风系统的工作原理是通过主机和新风管道,将室内的污染空气排出室外,同时引入...

    新风系统设计重点PPT学习教案.pptx

    新风系统设计是建筑环境工程中的重要组成部分,其主要目的是为室内环境提供清新、健康的空气,同时保持室内气候的适宜性。以下是对新风系统设计关键知识点的详细解析: 1. **新风定义**:新风指的是从室外引入的...

    新风机控制系统模块整理.pdf

    在VCOM公司DDC新风机控制系统模块上了解其基本配置:DDC模块、制冷模块、加热模块、中间继电器、变压器、开关电源、温度控制电路、散热风扇等设备组成。 2. 在VCOM公司DDC新风机控制系统模块上了解其功能,了解...

    机房新风系统介绍.pdf

    1. 吊顶全热交换新风机:通常安装在天花板上,具备两台风机和全热交换芯,可回收室内外能量,降低空调热损耗。 2. 轴流风机:设计为筒状,通常安装在墙上,用于消防排烟,也可以提供新风。 3. 双向流新风机:内部...

    2019年新风系统行业概览2020精品报告.rar

    新风系统,作为一种提高室内空气质量的有效手段,近年来在建筑领域得到了广泛应用。2019年的行业概览报告,结合了2020年的精品研究,为读者提供了全面深入的洞察,揭示了新风系统行业的最新趋势、市场规模、技术发展...

    新风网站管理系统 v1.0 测试版

    3. **动画功能**:集成的动画模块可能包含播放器功能,使用户可以在网站上展示动态内容,如GIF、Flash或其他动画格式,提高网站的视觉吸引力。 4. **留言功能**:通过内置的留言系统,访客可以与网站管理员进行交流...

    美的新风机组技术手册.doc

    "美的新风机组技术手册" 美的新风机组技术手册是美的商用空调研发的新风处理机产品,该产品采用直接膨胀制冷的方法,通过室内换热器强劲而精确的加热和冷却能力来处理室外空气以接近室温的新风处理设备。该产品的...

    新风系统的设计PPT学习教案.pptx

    在新风系统设计中,首要任务是理解通风的基本概念及其目的。通风是通过自然或机械方式实现室内与室外空气的交换,以满足人体对新鲜空气的需求,排除有害气体和热量,同时补充燃烧所需的空气。在设计时,考虑到节能...

    新风装置及消毒装置的制作方法.docx

    综上所述,本文所介绍的新风装置及消毒装置的制作方法,通过巧妙的设计和创新技术,解决了现有新风系统在运行中可能遇到的滤网清洁难题和细菌滋生问题,提高了新风装置的性能,保证了室内空气的清新和健康。...

Global site tag (gtag.js) - Google Analytics