注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

IOS & JAVA KEY

(iMilo)

 
 
 

日志

 
 
关于我

All the splendor in the world is not worth a good friend!! Hello my friend!!

网易考拉推荐

(iOS5.0+)UITextField登录效果优化 -- 类QQ(iPad版)效果  

2012-02-18 00:33:17|  分类: IOS |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


引入

这些天要改进应用的登陆效果,因为iPad升级到iOS5.0以后,键盘出现了拆分的效果,所以以前(iOS5.0之前)为了实现键盘弹出不挡住UITextField,用到了UITextFieldUITextFieldDelegate中的:

-       (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{

    [_baseSV setContentOffset:CGPointMake(x, y) animated:YES];

}

说明:_baseSV,是放置UITextField的父级视图,即重新设置父级视图的位置。

但是现在在iOS5.0+的环境下,如果键盘拆分的话,父级视图的位置还是会发生变化,这样就会出现屏幕下方空白的Bug,那么怎样解决此问题做到类似iPadQQ的登录效果呢?下面将做简单的说明。

解决方案:

1)      viewDidLoad方法中注册键盘监听事件,代码如下:

- (void)viewDidLoad {

    [super viewDidLoad];

    NSNotificationCenter *notification = [NSNotificationCenter defaultCenter];

    [notification addObserver:self

                     selector:@selector(keyboardWillShow)

                         name:UIKeyboardWillShowNotification

                       object:nil];

    [notification addObserver:self

                     selector:@selector(keyboardWillHide)

                         name:UIKeyboardWillHideNotification

                       object:nil];

}

 

2)      编写注册要调用的方法keyboardWillShow, keyboardWillHide,代码如下:

/*

 * @DO 隐藏键盘

 */

- (IBAction)keyboardWillHide {

    [UIView beginAnimations:@"keyboardWillHide" context:nil];

    [UIView setAnimationDuration:0.30f];

    [_baseSV setContentOffset:CGPointMake(0, 0) animated:YES];

    [_userNameTF resignFirstResponder];

    [_passwordTF resignFirstResponder];

    [UIView commitAnimations];

}

 

/*

 * @DO 显示键盘

 */

- (void)keyboardWillShow {

    [UIView beginAnimations:@"keyboardWillShow" context:nil];

    [UIView setAnimationDuration:0.30f];

    [_baseSV setContentOffset:CGPointMake(0, 40) animated:YES];

    [UIView commitAnimations];

}

说明:显示键盘的时候重新定义_baseSV的位置,隐藏键盘的时候将_baseSV的位置还原,上面加了动画可以不加,但加上可以让其效果更逼真。

 

3)      dealloc方法中注销键盘监听事件,代码如下:

- (void)dealloc {

    [_baseSV release];

    [_userNameTF release];

    [_passwordTF release];

    NSNotificationCenter *notification = [NSNotificationCenter defaultCenter];

    [notification removeObserver:self

                            name:UIKeyboardWillHideNotification

                          object:nil];

    [notification removeObserver:self

                            name:UIKeyboardWillShowNotification

                          object:nil];

    [super dealloc];

}

 

当然为了使客户体验更好,还是要配合UITextField的代理UITextFieldDelegate来使用,以及将UITextFieldclearButtonMode属性设置为:UITextFieldViewModeWhileEditing等等。

其他

Milo Zhang

2012-02-18

 


  评论这张
 
阅读(1453)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017