我有一个关于“移动位于键盘下的内容”的问题。
我有一个简单的“登录”视图,其中包含2个UITextFields(用户名和密码)和一个登录按钮。 当用户点击其中一个文本字段时,键盘出现并阻止登录按钮和密码文本字段。 所以我实现了Apple和另外一个提出的解决方案(见下面的链接):
http://ios-blog.co.uk/tutorials/how-to-make-uitextfield-move-up-when-keyboard-is-present/
但问题是键盘首先移动,只有当键盘完成移动时才会移动2 UITextFields和登录按钮。因此,它不是用户体验的最佳解决方案...... 你知道我可以在同时移动键盘和2个UITextFields吗?就像在iOS Facebook登录页面上一样。
谢谢!
答案 0 :(得分:1)
收到 UIKeyboardWillShowNotification 时,只需转移内容即可。而不是 UIKeyboardDidShowNotification 。
<强>更新强>
此外,如果您需要添加动画,可以使用键盘通知中的 userInfo 来获取键盘高度,新兴速度和动画曲线。
所以这段代码应该对 UIKeyboardWillShowNotification 做出反应:
[UIView animateWithDuration:[note.userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue] delay:0.0f options:[note.userInfo[UIKeyboardAnimationCurveUserInfoKey] intValue] animations:^{
// TODO: shift content here
} completion:nil];
您还需要类似 UIKeyboardWillHideNotification 的内容。差异只是在动画块内移动的方向。
答案 1 :(得分:1)
在这种情况下,您应截取UIKeyboardWillShowNotification
通知并使用动画块动画地偏移您的内容。
[UIView animateWithDuration:0.5 animations:^{
// your own animation code
// ...
} completion:nil];`
UIKeyboardWillHideNotification
通知也一样。
当然,如果你使用已经动画的方法滚动内容,你可以放置它而不需要动画块。
答案 2 :(得分:1)
嗯,你可以通过两种方式做到这一点:简单方法和艰难方式。
简单方法:使用TableViewController并创建包含文本字段的自定义单元格,而不是ViewController。当键盘上升时,TableViewController将负责为您移动视图。然后你需要担心的是,只要你想让键盘消失,就可以解雇键盘。
困难之处:使用ViewController。 要使其工作,您需要有2个通知,例如这些通知(将其放在viewDidLoad方法中):
// Keyboard notifications so things can move up when the keyboard shows up
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
然后你需要创建你在NotificationCenter中调用的2种方法,以实际执行屏幕的移动:
- (void) keyboardWillShow: (NSNotification*) aNotification
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];
CGRect rect = [[self view] bounds];
rect.origin.y -= 150;
[[self view] setFrame: rect];
[UIView commitAnimations];
}
// Call this to make the keyboard move everything down
- (void) keyboardWillHide: (NSNotification*) aNotification
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];
CGRect rect = [[self view] frame];
if (rect.origin.y == -150)
{
rect.origin.y += 150;
}
[[self view] setFrame: rect];
[UIView commitAnimations];
}
在此代码中,值150是键盘上/下的任意点数。无论屏幕大小如何,您都可以更改它或进行一些花哨的计算以获得屏幕的百分比。
希望它有所帮助!