`

新风作浪博客学习(十九)在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...

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

    在技术标准上,单向流正压送风系统要求主机具备免维护特性,PM2.5过滤效率至少95%,功率小于100W,风机防护等级IP65,噪声值低于38dB,且需使用阻燃材料的管道和风口。双向流全热交换新风系统在主机、风速控制、风口...

    honeywell中央新风系统

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

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

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

    新风合同.pdf

    然而,根据给出的【标题】和【部分内容】,我们可以看出这是一个与“新风合同”相关的文件内容。该部分内容虽然显示的是经过OCR扫描后识别的文字,但内容的含义和结构显得支离破碎,缺乏明确的信息和上下文。 考虑...

    一种基于新风系统控制面板的温度采集器的制作方法.docx

    新风系统控制面板上的温度采集器包括一个壳体,壳体正面安装有新风系统控制面板,面板上有新风系统的开关按钮和内外循环切换按钮。壳体背面则设有中心处理器和数据传输模块,中心处理器连接各个功能部件,如新风系统...

    大机房新风系统

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

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

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

    户内新风系统幻灯片.ppt

    新风系统源于欧洲,并逐渐发展成为一些国家的强制性安装标准,而中国则在近十几年内开始引入并应用。 新风系统的基本工作原理是通过系统主机和新风管道,将室内污染空气排出室外,同时引入经过过滤处理的新鲜空气,...

    新风机控制系统模块整理.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

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

Global site tag (gtag.js) - Google Analytics