iOS-UITextField-通知
1.键盘通知名都是系统自己定义好了的,不可改变。
UIKeyboardWillShowNotification
UIKeyboardWillHideNotification
UIKeyboardWillChangeFrameNotification
2.通知中传的字典类型参数
UIKeyboardAnimationCurveUserInfoKey = 7;
UIKeyboardAnimationDurationUserInfoKey ="0.25"; 键盘弹起或隐藏动画时长
UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {414, 271}}"; 键盘的bounds值
UIKeyboardCenterBeginUserInfoKey = "NSPoint: {207, 871.5}"; 键盘隐藏时中心位置
UIKeyboardCenterEndUserInfoKey = "NSPoint: {207, 600.5}"; 键盘弹起是中心位置
UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 736}, {414, 271}}"; 键盘隐藏时的frame值
UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 465}, {414, 271}}"; 键盘弹起时的frame值
UIKeyboardIsLocalUserInfoKey = 1;
// ViewController.m
// Text_文本框通知
//
// Created by mncong on 15/12/4.
// Copyright © 2015年 mancong. All rights reserved.
//
#import "ViewController.h"
@interface ViewController () <UITextFieldDelegate>
{
UITextField *_tf;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor grayColor];
//获取系统发出的键盘弹起的通知。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
//获取系统发出的键盘隐藏的通知。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
//获取系统发出的键盘frame值改变的通知。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardFrameChange:) name:UIKeyboardWillChangeFrameNotification object:nil];
//添加文本框
[self addTF];
}
#pragma mark 添加文本框
- (void)addTF
{
_tf = [[UITextField alloc] init];
_tf.translatesAutoresizingMaskIntoConstraints = NO;
_tf.delegate = self;
_tf.placeholder = @"这里就是万恶的被遮挡的文本框";
_tf.borderStyle = UITextBorderStyleLine;
[self.view addSubview:_tf];
//可以不必在意,我为了实验vfl语句能否获取控件的frame值。可以删掉这两行,再添加frame属性。
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[_tf]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_tf)]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[_tf(==40)]-100-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_tf)]];
}
#pragma mark 键盘弹起
- (void)keyboardWillShow:(NSNotification *)noti
{
NSLog(@"键盘弹起");
NSDictionary * dict = noti.userInfo;
NSLog(@"%@",dict);
/**dict:
{
UIKeyboardAnimationCurveUserInfoKey = 7;
UIKeyboardAnimationDurationUserInfoKey = "0.25";
UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {414, 271}}";
UIKeyboardCenterBeginUserInfoKey = "NSPoint: {207, 871.5}";
UIKeyboardCenterEndUserInfoKey = "NSPoint: {207, 600.5}";
UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 736}, {414, 271}}";
UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 465}, {414, 271}}";
UIKeyboardIsLocalUserInfoKey = 1;
}
*/
//获取文本框的最大Y值。
CGFloat tfMaxY = CGRectGetMaxY(_tf.frame);
//获取键盘弹起之后的Y值。
CGFloat keyboardY = [dict[UIKeyboardFrameEndUserInfoKey] CGRectValue].origin.y;
//获取键盘弹起使用的时间。
CGFloat duration = [dict[UIKeyboardAnimationDurationUserInfoKey] floatValue];
//判断是否遮挡
if (tfMaxY > keyboardY) {
//如果遮挡,添加动画,改变view的transform。
[UIView animateWithDuration:duration animations:^{
self.view.transform = CGAffineTransformMakeTranslation(0, keyboardY-tfMaxY);
}];
}
}
#pragma mark 键盘隐藏
- (void)keyboardWillHide:(NSNotification *)noti
{
//获取隐藏时间
CGFloat duration = [noti.userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue];
//取消transform的改变量。
[UIView animateWithDuration:duration animations:^{
self.view.transform = CGAffineTransformIdentity;
}];
}
#pragma mark frame改变的通知
- (void)keyboardFrameChange:(NSNotification *)noti
{
NSLog(@"键盘frame改变了");
}
#pragma mark 键盘的代理方法 点击return
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
@end
iOS-UITextField-通知的更多相关文章
- ios 消息通知
苹果的通知分为本地通知和远程通知,这里主要说的是远程通知 历史介绍 iOS 3 - 引入推送通知UIApplication 的 registerForRemoteNotificationTypes 与 ...
- iOS - Notification 通知
1.Notification 通知中心实际上是在程序内部提供了消息广播的一种机制,它允许我们在低程度耦合的情况下,满足控制器与一个任意的对象进行通信的目的.每一个 iOS 程序(即每一个进程)都有一个 ...
- IOS Notification 通知中心
1. 通知中心概述 通知中心实际上是在程序内部提供了消息广播的一种机制.通知中心不能在进程间进行通信.实际上就是一个二传手,把接收到的消息,根据内部的一个消息转发表,来将消息转发给需要的对象. ...
- IOS开发-通知与消息机制
在多数移动应用中不论什么时候都仅仅能有一个应用程序处于活跃状态.假设其它应用此刻发生了一些用户感兴趣的那么通过通知机制就能够告诉用户此时发生的事情. iOS中通知机制又叫消息机制,其包含两类:一类是本 ...
- IOS 本地通知 UILocalNotification
IOS 本地通知 UILocalNotification [本文章第四部分中的代码逻辑来自网上的借鉴,并非我自己原创] 大概一个月前,我开始跟着做IOS项目了.学习C++,了解Objective-C, ...
- IOS中通知中心(NSNotificationCenter)
摘要 NSNotification是IOS中一个调度消息通知的类,采用单例模式设计,在程序中实现传值.回调等地方应用很广. IOS中通知中心NSNotificationCenter应用总结 一.了 ...
- iOS 本地通知 操作
iOS 本地通知 操作 1:配置通知:然后退出程序: UILocalNotification *localNotif = [[UILocalNotification alloc] init]; loc ...
- 提高 iOS App 通知功能启用率的三个策略
我们都知道推送通知在 App 运营中的作用巨大.但是,很多用户却并不买帐,App 第一次启动提示是否「启用推送通知」时,他们直接选择了「否」. 是的,最近我本人就转变成了这样的人 - 认真地评估每个应 ...
- IOS NSNotification 通知
一. 先看下官方对NSNotification通知的解释 1. NSNotification 通知 @interface NSNotification : NSObject <NSCopying ...
- iOS - Push 通知推送
1.UserNotifications 通知是 App 用来和用户交流的一种方式,特别是当 App 并没有在前台运行的时候.通知,正如它的名称所强调的,被用作向用户'通知'一个事件,或者仅仅向用户提示 ...
随机推荐
- GTD时间管理---非行动性
一:行动性和非行动有什么区别? 1:非行动性:指的是收集箱中的信息,是先存储后使用,这些信息平时都处于冬眠状态,只是要用到的时候能够找到它就好了.(偏向于处理生活) 2:行动性: 指的是收集箱中的信息 ...
- Moccakids-Tangram Puzzle 限免啦!
圣诞前上线的App,Tangram Puzzle 限免,大家去下载玩玩. 介绍网站:http://www.mokamisu.com/ App Store:https://itunes.apple.co ...
- EF性能之关联加载
鱼和熊掌不能兼得 ——中国谚语 一.介绍 Entity Framework作为一个优秀的ORM框架,它使得操作数据库就像操作内存中的数据一样,但是这种抽象是有性能代价的,故鱼和熊掌不能兼得.但是,通过 ...
- 为EasyUI 的Tab 标签添加右键菜单
在网上看了很多demo 自己实现了一个效果如下 ps jquery1.7.2 jQuery EasyUI 1.3.6easyui QQ群:15129679 <!doctype html> ...
- Centos 7防火墙firewalld开放80端口
开启80端口 1.firewall-cmd --zone=public --add-port=80/tcp --permanent 出现success表明添加成功 命令含义: --zone #作用域 ...
- nodejs 的安全
1.connect中间件csrf 原理:在express框架中csrf 是通过connect 模块的中间件来解决的.其原理是在前端构造一个隐藏的表单域“_csrf” ,后端生成一个值,作为该表单域,然 ...
- 【jquery】一款不错的音频播放器——Amazing Audio Player
前段时间分享了一款视频播放器,点击这里.今天介绍一款不错的音频播放器——Amazing Audio Player. 介绍: Amazing Audio Player 是一个使用很方便的 Windows ...
- 使用vim 查看二进制文件
Vim 可以用来查看和编辑二进制文件 vim -b egenea-base.ko 加上-b参数,以二进制打开 然后输入命令 :%!xxd -g 1 切换到十六进制模式显示
- 【译】Python Lex Yacc手册
本文是PLY (Python Lex-Yacc)的中文翻译版.转载请注明出处.这里有更好的阅读体验. 如果你从事编译器或解析器的开发工作,你可能对lex和yacc不会陌生,PLY是David Beaz ...
- System.Diagnostics.Stopwatch
System.Diagnostics.Stopwatch 注意:此类在 .NET Framework 2.0 版中是新增的.MSDN Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量 ...