记录于2013/6/26:
一.点击键盘上的“Done”按钮关闭键盘
1.视图控制器实现UITextFieldDelegate协议
2.设置文本框属性
textField.returnKeyType = UIReturnKeyDone;
textField.delegate=self;
3. 重写协议方法
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textFieldresignFirstResponder];
// the user pressed the "Done" button, so dismiss the keyboard
returnYES;
}
二.点击键盘上的“Next”按钮实现文本框焦点跳转
1.视图控制器实现UITextFieldDelegate协议
2.设置文本框属性
tx_username.returnKeyType = UIReturnKeyNext;
tx_username.delegate =self;
3.重写协议方法
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
if([tx_username isFirstResponder]) {
[tx_email becomeFirstResponder];
}elseif([tx_email isFirstResponder]) {
[tx_password becomeFirstResponder];
} elseif([tx_password isFirstResponder]) {
[tx_conPassword becomeFirstResponder];
} elseif([tx_conPassword isFirstResponder]) {
[self performSelector:@selector(userRegister)];//tx_conPassword指定了<span style="font-family: Menlo; font-size: 11px;">UIReturnKeyJoin类型后调用的方法</span></span>
}
returnYES;
}
UIScrollView页面下点击TextField键盘事件:
不能改变scrollView的frame,得改变contentOffSet调整。
(1)
#pragma mark
#pragma mark - Textfield delegate
//增加手势 点击输入框以外区域降下键盘
-(void)RegisterViewAddGest:(UIImageView *)view {
view.userInteractionEnabled = YES;
//单击事件
UITapGestureRecognizer *taprecognizer;
taprecognizer = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(RegisterKeyDown:)];
taprecognizer.numberOfTapsRequired = 1;
[view addGestureRecognizer:taprecognizer];
[taprecognizer release];
}
//键盘下降的时候
-(void)RegisterKeyDown:(UITapGestureRecognizer *)taprecognizer{
DebugLog(@"点击背景键盘下降");
if (taprecognizer.numberOfTapsRequired == 1) {
[self.nameTextField resignFirstResponder];
[self.phoneTextField resignFirstResponder];
[self.addressTextField resignFirstResponder];
[self.goodsTextField resignFirstResponder];
[self.numberTextField resignFirstResponder];
[self.timeTextField resignFirstResponder];
[self.attendTextField resignFirstResponder];
NSTimeInterval animationDuration = 0.30f;
[UIView beginAnimations:@"ResizeForKeyboard"context:nil];
[UIView setAnimationDuration:animationDuration];
if (self.buyNowScrollView.contentOffset.y >= self.buyNowScrollView.contentSize.height - self.buyNowScrollView.frame.size.height) {
self.buyNowScrollView.contentOffset = CGPointMake(0, self.buyNowScrollView.contentSize.height - self.buyNowScrollView.frame.size.height);
}
[UIViewcommitAnimations];
}
}
//输入框return的时候
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
if ([textField isEqual:self.nameTextField]) {
[self.phoneTextFieldbecomeFirstResponder];
}elseif ([textField isEqual:self.phoneTextField]) {
[self.addressTextFieldbecomeFirstResponder];
}elseif ([textField isEqual:self.addressTextField]) {
[self.goodsTextFieldbecomeFirstResponder];
}elseif ([textField isEqual:self.goodsTextField]) {
[self.numberTextFieldbecomeFirstResponder];
}elseif ([textField isEqual:self.numberTextField]) {
[self.timeTextFieldbecomeFirstResponder];
}elseif ([textField isEqual:self.timeTextField]) {
[self.attendTextFieldbecomeFirstResponder];
}else {
DebugLog(@"输入框return的时候");
[textField resignFirstResponder];
NSTimeInterval animationDuration = 0.30f;
[UIViewbeginAnimations:@"ResizeForKeyboard"context:nil];
[UIViewsetAnimationDuration:animationDuration];
self.buyNowScrollView.contentOffset = CGPointMake(0, self.buyNowScrollView.contentSize.height - self.buyNowScrollView.frame.size.height);
[UIViewcommitAnimations];
}
returnYES;
}
//输入框弹出的时候
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
DebugLog(@"键盘弹出");
CGRect frame = textField.frame;
int offset = frame.origin.y + 70 - (self.view.frame.size.height - 216.0);//键盘高度216
NSTimeInterval animationDuration = 0.30f;
[UIView beginAnimations:@"ResizeForKeyBoard"context:nil];
[UIView setAnimationDuration:animationDuration];
if(offset > 0)
{
self.buyNowScrollView.contentOffset = CGPointMake(0, offset + 10);
}else{
self.buyNowScrollView.contentOffset = CGPointMake(0, 0);
}
[UIView commitAnimations];
}
(2)改写(1)的,更加稳定适用了 暂时还是很完美的
里面的都是textField嵌入在scroll里面的使用
#pragma mark - UITextFieldDelegate
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
//401为普通会员账号 402为普通会员密码 403为普通会员密码确认 404为普通会员昵称
//411为发型师会员账号 412为发型师会员密码 413为发型师会员密码确认 414为发型师会员姓名 415为发型师会员手机
//键盘高度216
if(textField.tag <= 404){
if ([textField isEqual:self.commonUserText]) {
[self.commonPassTextbecomeFirstResponder];
}elseif ([textField isEqual:self.commonPassText]){
[self.commonRepeatPassTextbecomeFirstResponder];
}elseif ([textField isEqual:self.commonRepeatPassText]){
[self.commonNickTextbecomeFirstResponder];
}else{
for (UIView *subView inself.commonScrollView.subviews) {
if ([subView isKindOfClass:[UITextFieldclass]]) {
[subView resignFirstResponder];
}
}
if (self.commonScrollView.contentSize.height - self.commonScrollView.contentOffset.y < self.commonScrollView.frame.size.height) {
[self.commonScrollViewsetContentOffset:CGPointMake(0, self.commonScrollView.contentSize.height - self.commonScrollView.frame.size.height) animated:YES];
}
}
}else{
if ([textField isEqual:self.barberUserText]) {
[self.barberPassTextbecomeFirstResponder];
}elseif ([textField isEqual:self.barberPassText]){
[self.barberRepeatPassTextbecomeFirstResponder];
}elseif ([textField isEqual:self.barberRepeatPassText]){
[self.barberNickTextbecomeFirstResponder];
}elseif ([textField isEqual:self.barberNickText]){
[self.barberTelphoneTextbecomeFirstResponder];
}else{
for (UIView *subView inself.barberScrollView.subviews) {
if ([subView isKindOfClass:[UITextFieldclass]]) {
[subView resignFirstResponder];
}
}
//scroll的内容高度 - scroll的contentOffSet高度 < scroll的frane高度
if (self.barberScrollView.contentSize.height - self.barberScrollView.contentOffset.y < self.barberScrollView.frame.size.height) {
[self.barberScrollViewsetContentOffset:CGPointMake(0, self.barberScrollView.contentSize.height - self.barberScrollView.frame.size.height) animated:YES];
}
}
}
returnYES;
}
- (void)textFieldDidBeginEditing:(UITextField *)textField{
//401为普通会员账号 402为普通会员密码 403为普通会员密码确认 404为普通会员昵称
//411为发型师会员账号 412为发型师会员密码 413为发型师会员密码确认 414为发型师会员姓名 415为发型师会员手机
//键盘高度216
CGRect frame = textField.frame;
int offset;
if(textField.tag <= 404){
//scroll的y坐标 + textField在Scroll上的y坐标 + textField高度 - 除键盘高度外屏幕高度
offset = frame.origin.y + 110 + 30 + 6 - (SCREEN_HEIGHT - 252);
NSTimeInterval animationDuration = 0.30f;
[UIViewbeginAnimations:@"ResizeForKeyBoard"context:nil];
[UIViewsetAnimationDuration:animationDuration];
if(offset > 0)
{
[self.commonScrollViewsetContentOffset:CGPointMake(0, offset) animated:YES];
}else{
[self.commonScrollViewsetContentOffset:CGPointMake(0, 0) animated:YES];
}
[UIViewcommitAnimations];
}else {
NSLog(@"%f",SCREEN_HEIGHT);
offset = frame.origin.y + 146 - (SCREEN_HEIGHT - 252);
if(offset > 0)
{
[self.barberScrollViewsetContentOffset:CGPointMake(0, frame.origin.y + 146 - (SCREEN_HEIGHT - 252)) animated:YES];
}else{
[self.barberScrollViewsetContentOffset:CGPointMake(0, 0) animated:YES];
}
}
}
- (void)textFieldDidEndEditing:(UITextField *)textField{
//scroll的内容高度 - scroll的contentOffSet高度 < scroll的frane高度
if (self.commonScrollView.contentSize.height - self.commonScrollView.contentOffset.y < self.commonScrollView.frame.size.height) {
[self.commonScrollViewsetContentOffset:CGPointMake(0, self.commonScrollView.contentSize.height - self.commonScrollView.frame.size.height) animated:YES];
}
if (self.barberScrollView.contentSize.height - self.barberScrollView.contentOffset.y < self.barberScrollView.frame.size.height) {
[self.barberScrollViewsetContentOffset:CGPointMake(0, self.barberScrollView.contentSize.height - self.barberScrollView.frame.size.height) animated:YES];
}
}
- (void)keyboardWillShow:(NSNotification *)noti
{
//键盘输入的界面调整
//键盘的高度
float height = 216.0;
CGRect frame = self.view.frame;
frame.size = CGSizeMake(frame.size.width, frame.size.height - height);
[UIView beginAnimations:@"Curl"context:nil];//动画开始
[UIView setAnimationDuration:0.30];
[UIView setAnimationDelegate:self];
[self.view setFrame:frame];
[UIView commitAnimations];
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
// When the user presses return, take focus away from the text field so that the keyboard is dismissed.
NSTimeInterval animationDuration = 0.30f;
[UIView beginAnimations:@"ResizeForKeyboard" context:nil];
[UIView setAnimationDuration:animationDuration];
CGRect rect = CGRectMake(0.0f, 0.0f, self.view.frame.size.width, self.view.frame.size.height);
self.view.frame = rect;
[UIView commitAnimations];
[textField resignFirstResponder];
return YES;
}
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
CGRect frame = textField.frame;
int offset = frame.origin.y + 70 - (self.view.frame.size.height - 216.0); //键盘高度216 ,向上提多少在这里改
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(offset > 0)
{
CGRect rect = CGRectMake(0.0f, -offset,width,height);
self.view.frame = rect;
}
[UIView commitAnimations];
}
- js键盘事件全面控制详解
js键盘事件全面控制 主要分四个部分第一部分:浏览器的按键事件第二部分:兼容浏览器第三部分:代码实现和优化第四部分:总结 第一部分:浏览器的按键事件 用js实现键盘记录,要关注浏览器的三种按键事件 ...
- js键盘事件全面控制
js键盘事件全面控制 主要分四个部分第一部分:浏览器的按键事件第二部分:兼容浏览器第三部分:代码实现和优化第四部分:总结 第一部分:浏览器的按键事件 用js实现键盘记录,要关注浏览器的三种按键事件类型 ...
- js键盘事件全面控制详解【转】
js键盘事件全面控制 主要分四个部分第一部分:浏览器的按键事件第二部分:兼容浏览器第三部分:代码实现和优化第四部分:总结 第一部分:浏览器的按键事件 用js实现键盘记录,要关注浏览器的三种按键事件类型 ...
- JavaScript键盘事件全面控制代码
JavaScript键盘事件全面控制,它可以捕获键盘事件的输入状态,可以判断你敲打了键盘的那个键,ctrl.shift,26个字母等等,返回具体键盘值. <html> <head&g ...
- Js键盘事件全面控制,回车按键事件,键盘对应按键码,按键事件兼容各个浏览器。
在网上查询的按键码如下: 一.键盘按键和键盘对应代码表: 字母按键码A <--------> 65 B <--------> 66 C <--------> 6 ...
- js浏览器键盘事件控制(转自新浪微博)
js键盘事件全面控制 主要分四个部分第一部分:浏览器的按键事件第二部分:兼容浏览器第三部分:代码实现和优化第四部分:总结 第一部分:浏览器的按键事件 用js实现键盘记录,要关注浏览器的三种按键事件类型 ...
- iOS自动处理键盘事件的第三方库:IQKeyboardManager
我们写界面要考虑很多用户体验问题,键盘事件的响应就是比较麻烦的一种.我们需要监听键盘事件,考虑点击背景收起键盘.考虑键盘遮挡输入框问题等等,而且每个界面都要做这么一套.这个库帮我们解决了这个事情. 这 ...
- IOS中input键盘事件支持的解决方法
欢迎大家去我的网站详细查看http://genghongshuo.com.cn/ IOS中input键盘事件keyup.keydown.等支持不是很好, 用input监听键盘keyup事件,在安卓手机 ...
- iOS 键盘自适应(IQKeyboardManager)使用小结
IQKeyboardManager Github地址 经常在开发一个应用程序,我们遇到了一个问题,iPhone的键盘上滑覆盖的UITextField / UITextView.IQKeyboardMa ...
随机推荐
- HDU 2717(* bfs)
题意是在一个数轴上,每次可以一步到达当前位置数值的 2 倍的位置或者数值 +1 或数值 -1 的位置,给定 n 和 k,问从数值为 n 的位置最少多少步可以到达数值为 k 的位置. 用广搜的方法,把已 ...
- 深入理解JAVA中的代理模式
前言 代理是什么 事故现场:我家的宠物今天生病了,而我又没有相关的医学知识,所以我只让我的宠物多喝热水吗? 结果显然是不行的,所以我需要去找宠物医生这些更专业的人来帮我的宠物治病. 这个时候,代理就出 ...
- 解决reverse改变原数组
let arr =[1,2,3,4] console.log(arr) //[1,2,3,4] let arr2 = arr; console.log(arr2) //[4,3,2,1] consol ...
- 安装pandas报错(AttributeError: 'module' object has no attribute 'main')
在pycharm中安装pandas出现报错:AttributeError: 'module' object has no attribute 'main', 刚开始以为是pip的版本太旧了,于是乎将其 ...
- Qt for Android开发总结
近段时间,本人使用Qt5.3.0开发了Android应用,由于官方资料较少,在此记录开发过程遇到的问题及解决方法 1.Android平台的视频播放,只能使用qml的MediaPlayer 2.qml中 ...
- input 上报流程图
input 上报流程图 http://blog.chinaunix.net/uid-28320320-id-3389196.html
- TCP-IP详解笔记8
TCP-IP详解笔记8 TCP超时与重传 下层网络层(IP)可能出现丢失, 重复或丢失包的情况, TCP协议提供了可靠的数据传输服务. TCP启动重传操作, 重传尚未确定的数据. 基于时间重传. 基于 ...
- module.exports与exports区别
CommonJS模块规范 Node应用由模块组成,采用CommonJS模块规范. 根据这个规范,每个文件就是一个模块,有自己的作用域.在一个文件里面定义的变量.函数.类,都是私有的,对其他文件不可见. ...
- Haproxy_haproxy.cfg
global # 全局参数的设置 log 127.0.0.1 local2 # log语法:log <address_1>[max_level_1] # 全局的日志配置,使用log关键字, ...
- 如何用java实现一个p2p种子搜索(3)-dht协议实现
dht协议实现 上一篇完成了路由表的实现,建立了路由表后,我们还要对路由表进行初始化,因为一开始路由表为空,所以我们需要借助一些知名的dht网络中的节点,对这些节点进行find_node,然后一步步初 ...