【发布时间】:2015-11-29 17:12:37
【问题描述】:
对于只有三个文本字段和提交按钮的登录屏幕,我希望在键盘出现时视图向上移动,这样虽然字段没有隐藏,但它也不会向上移动到视图之外。
所需的移动量使得提交按钮位于键盘上方的固定距离。虽然可以通过在页面上向上移动字段来为键盘留出空间,但提交按钮仍处于隐藏状态
我尝试添加以下内容:
-(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];
}
我不知道如何实现这一点。如果你只是保持原样,什么都不会发生。我猜你应该用你的文本字段的名称重命名文本字段,但在这种情况下,你会为每个文本字段都这样做吗?我无法让它产生任何效果。
另一个建议是使用诸如 TPKeyboardAvoiding 之类的类别,但这需要一个滚动视图,在这种情况下我不需要。
2015 年这个问题没有直接的解决方案吗?
【问题讨论】:
标签: ios xcode keyboard textfield