UIView通过uitextfield键盘自动移动

时间:2015-01-23 13:21:46

标签: ios objective-c uitextfield first-responder uitextfielddelegate

所以我的手上有一个非常奇怪的问题,搜索时间没有提供任何结果。

我有一个包含uitextfield的uiview。现在,最初此视图位于可见屏幕之外,坐标如x = -500,y = -500。

然而,按下按钮时,此视图会动画并移动到屏幕中央。

现在每当我点击作为此视图子视图的uitextfield时。此视图将移回屏幕外的原始坐标。

我疯狂地检查了我的代码,没有任何东西可以在外面再次移动视图。任何帮助解释这种非常不熟悉的行为都会非常感激。

此代码将视图移动到屏幕上

- (IBAction)Register:(id)sender {
//(self.view.frame.size.width/2)-(self.SignUp_Screen.frame.size.width/2);
//self.login_Screen.hidden = YES;
self.blurView.hidden = NO;
//self.SignUp_Screen.layer.zPosition = 5;
NSLog(@"Register");
self.SignUp_Screen.hidden = NO;

[UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
        self.SignUp_Screen.frame = CGRectMake(35, 50,self.SignUp_Screen.frame.size.width , self.SignUp_Screen.frame.size.height);
} completion:^(BOOL finished) {

}];
}

这些是textfield的委托方法

-(void)textFieldDidEndEditing:(UITextField *)textField
{
    NSLog(@"TextFieldEndEditing");
    [textField resignFirstResponder];
}

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
    NSLog(@"textFieldShouldReturn");
    [textField resignFirstResponder];
    return YES;
}

3 个答案:

答案 0 :(得分:1)

正如Wezly暗示的那样,如果您使用自动布局,则不再直接修改框架。那是旧世界。您希望为约束设置Outlet /属性并为其设置动画。

[UIView animateWithDuration:0.25
                 animations:^{
                   SignUp_Screen.centerXConstraint.constant = ...;
                   SignUp_Screen.centerYConstraint.constant = ...;
                   [SignUp_Screen layoutIfNeeded];
 }];

有关详细信息,请参阅herehere

答案 1 :(得分:0)

我解决这个问题的方法是将IBOutlet链接到我想要更改的约束,然后设置它的constant值。

<强>·H

@interface ViewController : UIViewController {
    IBOutlet NSLayoutConstraint *constraintHandle;
}

<强>的.m

[UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
    constraintHandle.constant = self.view.center.x;
    [SignUp_Screen layoutIfNeeded];
} completion:^(BOOL finished) {

}];

不要忘记将IBOutlet链接到故事板或xib中的约束。

答案 2 :(得分:0)

如果使用自动布局,则不应修改帧。您应该通过动画约束的常量来为视图设置动画。例如:

NSLayoutConstraint *viewY; //constraint from superview top to view top

viewY.constant = 100;
[self.view setNeedsUpdateConstraints];
[UIView animateWithDuration:0.3f animations:^{
    [self.view layoutIfNeeded];
}];