为 UITextField 增加键盘偏移的模板化写法
.h代码 #import <UIKit/UIKit.h>@interface ViewController : UIViewController<UITextFieldDelegate> {int i_offset; //偏移量int i_textFieldY; //textField 的y 值int i_textFieldHeight; //textField的高度IBOutlet UITextField *uitf_textField1;IBOutlet UITextField *uitf_textField2;IBOutlet UITextField *uitf_textField3; }@end
.m代码
#import "ViewController.h"#define StautsBarHeight 20.0f@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.uitf_textField1.delegate = self;uitf_textField2.delegate = self;uitf_textField3.delegate = self;i_offset = 0; //默认偏移量为0i_textFieldY = 0; i_textFieldHeight = 0;//注册键盘监听消息 [self registerKeyBoardNotification];}- (void)viewDidUnload {[super viewDidUnload];// Release any retained subviews of the main view. } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); }#pragma mark- UITextFieldDelegateMethod- (void)textFieldDidBeginEditing:(UITextField *)textField { NSLog(@"进入textFieldDidBeginEditing"); i_textFieldY = textField.frame.origin.y;i_textFieldHeight = textField.frame.size.height;}- (BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resignFirstResponder];return YES; }#pragma mark- 键盘通知事件 [核心代码]//注册键盘监听消息 -(void)registerKeyBoardNotification {//增加监听,当键盘出现或改变时收出消息 [核心代码] [[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(keyboardWillShow:)name:UIKeyboardWillShowNotificationobject:nil];//增加监听,当键退出时收出消息 [[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(keyboardWillHide:)name:UIKeyboardWillHideNotificationobject:nil];// 键盘高度变化通知,ios5.0新增的 #ifdef __IPHONE_5_0float version = [[[UIDevice currentDevice] systemVersion] floatValue];if (version >= 5.0) {[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillChangeFrameNotification object:nil];} #endif }//当键盘出现或改变时调用 - (void)keyboardWillShow:(NSNotification *)aNotification {//获取键盘的高度NSDictionary *userInfo = [aNotification userInfo];NSValue *aValue = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];CGRect keyboardRect = [aValue CGRectValue];int keyboardHeight = keyboardRect.size.height;//计算偏移量i_offset = keyboardHeight - (self.view.frame.size.height-(i_textFieldY+i_textFieldHeight));//进行偏移NSTimeInterval animationDuration = 0.30f; [UIView beginAnimations:@"ResizeForKeyBoard" context:nil]; [UIView setAnimationDuration:animationDuration];float width = self.view.frame.size.width; float height = self.view.frame.size.height; if(i_offset > 0) {CGRect rect = CGRectMake(0.0f,StautsBarHeight-i_offset,width,height); //把整个view 往上提,肯定要用负数 y self.view.frame = rect; } [UIView commitAnimations]; }//当键退出时调用 - (void)keyboardWillHide:(NSNotification *)aNotification {if(i_offset > 0) {//恢复到偏移前的正常量NSTimeInterval animationDuration = 0.30f; [UIView beginAnimations:@"ResizeForKeyBoard" context:nil]; [UIView setAnimationDuration:animationDuration];float width = self.view.frame.size.width; float height = self.view.frame.size.height; CGRect rect = CGRectMake(0.0f,StautsBarHeight,width,height); //把整个view 往上提,肯定要用负数 y 注意self.view 的y 是从20开始的,即StautsBarHeight self.view.frame = rect; [UIView commitAnimations]; } i_offset = 0; }
转载于:https://www.cnblogs.com/ygm900/p/3152287.html
为 UITextField 增加键盘偏移的模板化写法相关推荐
- 还应该如何实现“模板化函数指针”?
是否可以建立一组模板化的函数指针,而无需手动进行操作呢? 这是一个例子,说明我在说什么. 假设我有一个经常被调用的函数" write",其中有两个实现(可以在它们之间进行动态切换) ...
- 从零開始学习制作H5应用——V5.0:懊悔机制,整理文件夹,压缩,模板化
经过前面四个版本号的迭代.我们已经制作了一个从视觉和听觉上都非常舒服的H5微场景应用,没有看过的请戳以下: V1.0--简单页面滑动切换 V2.0--多页切换.透明过渡及交互指示 V3.0--增加lo ...
- 为PLOG增加了三套模板
博客程序PLOG真的不错,我现在在局域网内就在用它为用户提供博客服务,如果你有兴趣,可以goole一下,目前国内可以找到0.31版的不完全汉化版,如果你喜欢尝新,可以到它的 官方主页下载最新版0.32 ...
- 利用模板化应对ERP业务模型的快速变化
源宝导读:ERP这类复杂系统中,业务模型是系统功能的核心抽象,但业务模型对于不同的客户会有差异,也会随着业务发展而变化.虽然可以对业务组件进行复用,但客户定制的成本依然较高,本文将讨论如何利用模板化应 ...
- 最强AE模板化视频制作引擎上线 VE 3.0七大体验更新
一直以来,VE视频引擎就非常重视设计师在视频内容生产中起到的作用,把设计师从视频的创作者转变成了视频模板的生产者,结合技术方案将设计师的能力产品化,从而赋能各个领域的视频生产.为此,VE视频引擎先后推 ...
- C语言 模板化<template>编程萌芽
缘起 实际大型项目中的源码结构,其设计优雅.精密.阅读这样的代码,给我的感觉,就像在读一部长诗,虽然篇幅宏大,但却又不显得冗余.枯燥.不由得也想亲自尝试写一首小诗.于是就选择梳理一下最近比较感兴趣的一 ...
- 利用Aspose.Word控件和Aspose.Cell控件,实现Word文档和Excel文档的模板化导出
我们知道,一般都导出的Word文档或者Excel文档,基本上分为两类,一类是动态生成全部文档的内容方式,一种是基于固定模板化的内容输出,后者在很多场合用的比较多,这也是企业报表规范化的一个体现. 我的 ...
- 验证 Boost.Optional 复制构造函数不会尝试调用从模板化参数初始化构造函数的元素类型
验证 Boost.Optional 复制构造函数不会尝试调用从模板化参数初始化构造函数的元素类型 实现功能 C++实现代码 实现功能 验证 Boost.Optional 复制构造函数不会尝试调用从模板 ...
- Boost:使用静态c ++内核语言扩展以进行编译和 执行模板化的c ++内核
Boost:使用静态c ++内核语言扩展以进行编译和 执行模板化的c ++内核 实现功能 C++实现代码 实现功能 使用静态c ++内核语言扩展以进行编译和 执行模板化的c ++内核 C++实现代码 ...
最新文章
- 关于startActivityForResult
- 计算机组成原理怎么考察的,计算机组成原理课程考察报告(论文).doc
- pc receiver2.0.3_【工控笔记】WINCC 7.4与博途V15.1仿真软件S7PLCSIM V15 通信
- Java和Python中类似Kotlin的生成器,续:附加参数
- python中+=和=+的区别
- 电脑安装python后开不了机_Python学习第145课——关于无法正常启动centOS问题的解决方案...
- 但是我不知道什么是容器
- on the way
- How to learn Japanese ?
- android画布橡皮,Android绘图实现橡皮擦功能
- 计算机网络安全中的审计,什么是网络安全审计
- 2所非211院校挺进全球高校600强,甩开一众985 | 泰晤士世界大学排行榜出炉
- OBCA认证知识点-part3
- 给代币添加高级功能-代币管理、增发、兑换、冻结等
- 导出excel工具类
- 玩转华为数据中心交换机系列 | 配置动态路由接入M-LAG
- 产品生命周期管理——高效的全生命周期的产品管理方法
- Mesalink v1.0.0 发布,正式支持 TLS 1.3 和 IPv6,支持CMake编译,支持Windows,实现生产环境可用...
- 调试WebService的一个很好的工具
- visual studio下设置驱动开发环境
热门文章
- Java程序员春招三面蚂蚁金服,1200页文档笔记
- Android性能优化之APK优化,内容太过真实
- 【机器学习入门到精通系列】粒子群优化算法
- 【深度学习入门到精通系列】留一交叉验证法Python实现(看不懂你来打我~!)
- python【蓝桥杯vip练习题库】ADV-9 递归倒置字符数组
- 【网页前端设计Front end】CSS入门(看不懂你来打我)
- c语言判断一个月有多少天程序,【0320】C语言编写的小程序,算算自己已经活了多少天...
- python中的引用_Python中的引用
- cpu线程_进程/线程上下文切换会用掉你多少CPU?
- 网络推广离不开关键词的精准挖掘