2

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

4

5 回答 5

4

考虑到您的 TextField 出口已命名txtField,然后使用实现UITextField Delegate

txtField.delegate = self;

考虑到您的 ScrollView 插座被命名为scrollView. 实现 Textfield 委托方法:

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

希望这可以帮助。

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

于 2013-07-26T17:03:02.390 回答
1

我通常成功地使用它:http: //developer.apple.com/library/ios/#documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html

于 2013-07-26T16:57:03.687 回答
0

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

于 2013-07-27T09:22:34.590 回答
0

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

于 2013-07-26T16:33:29.437 回答
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 类型的实例变量

于 2015-08-19T10:03:20.267 回答