开始编辑和键盘时,在textField上滚动

时间:2013-07-26 16:27:30

标签: iphone ios uiscrollview keyboard uitextfield

我有一个由UIImageView组成的viewController,它填充整个视图,两个textField位于视图的中心。所有这些都位于ScrollView中。 我使用Storyboard,我禁用了自动布局。 当我单击textField,然后打开键盘时,我希望滚动直接在textField上移动。我怎么能这样做?

5 个答案:

答案 0 :(得分:4)

请考虑将TextField插座命名为txtField,然后使用

实施UITextField Delegate
txtField.delegate = self;

考虑到您的ScrollView插座名为scrollView。实现Textfield Delegate方法:

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    NSLog(@"%@",NSStringFromCGRect(textField.frame));
    [scrollView scrollRectToVisible:textField.frame animated:YES];
}

希望这有帮助。

如果您需要更多帮助,请告诉我。

答案 1 :(得分:1)

答案 2 :(得分:0)

添加您的控制器作为键盘通知的观察者。收到通知时,请调整滚动视图框的大小和/或设置内容偏移(取决于您想要的确切效果和内容大小)。

答案 3 :(得分:0)

以下是我以前使用过的几个选项:

答案 4 :(得分:0)

您可以将文本字段坐标系转换为滚动视图坐标系。使用以下代码

-(void)rearrangeView{
    // previous

    if (txtActiveField == txtUsername) {
        CGPoint pt;
        CGRect rc = [txtUsername bounds];
        rc = [txtUsername convertRect:rc toView:scrollViewLogin];
        pt = rc.origin;
        pt.x = 0;
        pt.y -= 40;
        [scrollViewLogin setContentOffset:pt animated:YES];
    }
    else if (txtActiveField == txtPassword) {
        // [self.txtEmail becomeFirstResponder];
        CGPoint pt;
        CGRect rc = [txtPassword bounds];
        rc = [txtPassword convertRect:rc toView:scrollViewLogin];
        pt = rc.origin;
        pt.x = 0;
        pt.y -= 40;
        [scrollViewLogin setContentOffset:pt animated:YES];
    }
}

#pragma mark- UITextField Delegate
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    txtActiveField = textField;
    //txtActiveField.placeholder = @"";
    [self rearrangeView];

    return YES;
}

这里txtActiveField是UItextField类型的实例变量