键盘代理根据虚拟键盘弹出和收回控制UITextfield位置
最近个人几篇文章介绍了改键盘代理的文章. 关联文章的地址
因为iOS移动设备屏幕大小有限,不能像桌面用鼠标随便拖动,所以相似登岸页面输入时,常把输入框避开虚拟键盘,或者虚拟键盘弹出时输入框移动到可见位置。需要做的是让UItextfield设置代理,然后利用其代理方法:
//键盘收回时代理函数,这里设置登岸框归位
- (void)textFieldDidEndEditing:(UITextField *)textField{//
[UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationCurveLinear animations:^{
[loginView setFrame:CGRectMake(296, 376, 432, 300)];
} completion:nil];
}
//键盘弹出时代理函数,这里设置登岸框移动到可见区域
- (void)textFieldDidBeginEditing:(UITextField *)textField{
[UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationCurveLinear animations:^{
[loginView setFrame:CGRectMake(296, 88, 432, 300)];
} completion:nil];
}
//点击肯定后键盘收回
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
[textField resignFirstResponder];
return YES;
}
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
- (void)keyboardWillShow:(NSNotification *)notification
{
NSDictionary *info = [notification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardBoundsUserInfoKey] CGRectValue].size;
//UIKeyboardCenterEndUserInfoKey
int changeBalue=715-kbSize.height;
[searchView setFrame:CGRectMake(0, changeBalue, 284, 53)];
}
但是实际上objectForKey:UIKeyboardBoundsUserInfoKey已经被弃用了,虽然现在还可以用,文档说提议用UIKeyboardFrameBeginUserInfoKey替换,使用方法以后更新
-(void)textFieldDidBeginEditing:(UITextField *)textField
{
userName.hidden=YES;
loginPass.hidden=YES;
loginButton.hidden=YES;
[selfregNotification];
}
-(void)textFieldDidEndEditing:(UITextField *)textField
{
userName.hidden=NO;
loginPass.hidden=NO;
loginButton.hidden=NO;
[selfunregNotification];
}
- (void)regNotification
{
[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotificationobject:nil];
}
- (void)unregNotification
{
[[NSNotificationCenterdefaultCenter] removeObserver:selfname:UIKeyboardWillChangeFrameNotificationobject:nil];
}
#pragma mark - notification handler
- (void)keyboardWillChangeFrame:(NSNotification *)notification
{
NSDictionary *info = [notification userInfo];
CGFloat duration = [[info objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue];
CGRect beginKeyboardRect = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
CGRect endKeyboardRect = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
CGFloat yOffset = endKeyboardRect.origin.y - beginKeyboardRect.origin.y;
CGRect inputFieldRect = RegName.frame;
CGRect moreBtnRect = RegPass.frame;
inputFieldRect.origin.y += yOffset+50;
moreBtnRect.origin.y += yOffset+50;
NSLog(@"%f-----%f--------%f----%f",inputFieldRect.origin.x,inputFieldRect.origin.y,inputFieldRect.size.width,inputFieldRect.size.height);
[UIViewanimateWithDuration:duration animations:^{
RegName.frame = inputFieldRect;
RegPass.frame = moreBtnRect;
}];
}
文章结束给大家分享下程序员的一些笑话语录:
腾讯总舵主马化腾,有人曾经戏称如果在Z国选举总统,马化腾一定当选,因为只要QQ来一个弹窗”投马总,送Q币”即可。