ios - 出现iOS键盘时如何向上移动 View ?

标签 ios xcode keyboard textfield

对于只有三个文本字段和提交按钮的登录屏幕,我希望当键盘出现时 View 向上移动,这样当字段没有隐藏时,它也不会向上移出 View 。

所需的移动量使得提交按钮在键盘上方有固定距离。虽然可以通过将字段移到页面的高处为键盘留出空间,但提交按钮仍然隐藏

我尝试只添加以下内容:

-(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];
}

这会将 View 向上移动一个固定的量,但移动量太大以至于无法编辑字段,即它们太高了。

建议的另一个 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 之类的类别,但这需要我在这种情况下不需要的 ScrollView 。

这个问题在2015年没有直接的解决方案吗?

最佳答案

当用户开始输入时,以下动画会将您的 View (在本例中为 viewForLogin)移动到上方 200 像素。当文本字段结束编辑时, View 将动画回到原始位置。不要忘记为文本字段设置委托(delegate)。

swift 3

func textFieldDidBeginEditing(_ textField: UITextField) {
    UIView.animate(withDuration: 0.3, animations: {
        self.view.frame = CGRect(x:self.view.frame.origin.x, y:self.view.frame.origin.y - 200, width:self.view.frame.size.width, height:self.view.frame.size.height);

    })
}

func textFieldDidEndEditing(_ textField: UITextField) {
    UIView.animate(withDuration: 0.3, animations: {
        self.viewSupport.frame = CGRect(x:self.viewSupport.frame.origin.x, y:self.viewSupport.frame.origin.y + 200, width:self.viewSupport.frame.size.width, height:self.viewSupport.frame.size.height);

    })
}

objective-C

-(void)textFieldDidBeginEditing:(UITextField *)textField
{
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:.3];
    [UIView setAnimationBeginsFromCurrentState:TRUE];
    self.view.frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y -200., self.view.frame.size.width, self.view.frame.size.height);

    [UIView commitAnimations];


}


-(void)textFieldDidEndEditing:(UITextField *)textField
{
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:.3];
    [UIView setAnimationBeginsFromCurrentState:TRUE];
    self.view.frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y +200., self.view.frame.size.width, self.view.frame.size.height);

    [UIView commitAnimations];

}

关于ios - 出现iOS键盘时如何向上移动 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32382892/

相关文章:

ios - 强制 Facebook 电子邮件和 user_friends 权限

ios - XCODE 6.2 不合格设备 IOS 8.3

objective-c - 在 UICollectionViewCell 上设置 .reuseIdentifier

objective-c - Xcode 4 和 BWToolKit

cocoa - 最小化后 TVOS 键盘丢失键盘外观

ios - Flutter软件包构建错误“未找到swift文件”

javascript - 将 JSON 提要(WP 提要)解析为 React Native 提要页面

ios - UITableView - 最后一部分的页脚滚出屏幕底部。如何预防?

ios - 想知道在文本字段编辑 ios 期间按下键盘后退按钮时的任何时间