对于仅有三个文本字段和提交按钮的登录界面,当键盘出现时,我希望视图向上移动,以便在字段未隐藏的情况下,它也不会向上移出视图。
所需的移动量是使提交按钮与键盘保持固定距离。虽然可以将字段移到页面的顶部留出键盘空间,但提交按钮仍然会被隐藏。
我尝试了添加以下内容:
-(void) viewWillAppear:(BOOL)Animated {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
}
- (void)viewWillDisappear:(BOOL)animated {
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
}
这个操作将视图向上移动固定的距离,但是会导致字段无法被编辑,即它们被移到了太高的位置。
另一个 SO 答案建议:
-(void)textFieldDidBeginEditing:(UITextField *)textField
{
[self animateTextField:textField up:YES];
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
[self animateTextField:textField up:NO];
}
-(void)animateTextField:(UITextField*)textField up:(BOOL)up
{
const int movementDistance = -200; // tweak as needed
const float movementDuration = 0.3f; // tweak as needed
int movement = (up ? movementDistance : -movementDistance);
[UIView beginAnimations: @"animateTextField" context: nil];
[UIView setAnimationBeginsFromCurrentState: YES];
[UIView setAnimationDuration: movementDuration];
self.view.frame = CGRectOffset(self.view.frame, 0, movement);
[UIView commitAnimations];
}
我无法弄清如何实施这个。如果你只是按原样不做任何操作,什么也不会发生。我猜你应该以你的文本框的名称重命名textfield,但在这种情况下,你会为每个文本框都这样做吗?我无法使其产生任何效果。
另一个建议是使用类别,例如TPKeyboardAvoiding,但这需要一个滚动视图,在这种情况下我不需要。
2015年难道没有简单明了的解决方案吗?