【问题标题】:Scroll on textField when begin Editing and keyboard appear开始编辑时在 textField 上滚动并出现键盘
【发布时间】:2013-07-27 00:35:39
【问题描述】:

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

【问题讨论】:

    标签: iphone ios uiscrollview keyboard uitextfield


    【解决方案1】:

    假设您的 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];
    }
    

    希望这会有所帮助。

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

    【讨论】:

    • 它不工作。我按照你告诉我的一切。请记住,我不使用自动布局。
    • @Pinturikkio:你有滚动视图吗?您的文本字段是否也隐藏在键盘后面?你的文本字段也在你的滚动视图中吗?
    • @Pinturikkio:也用我上面的更新答案检查控制台中登录的框架是什么?当您单击文本字段时?
    • 我有一个 scrollView 是的!我的 textField 在我的滚动视图中。控制台输出:{{41, 325}, {240, 30}}
    • @Pinturikkio 好的,请确保即使您的键盘打开(在屏幕上可见),滚动视图的某些部分也是可见的。您可以通过为滚动视图背景设置一些颜色来检查这一点。如果是这种情况,那么我的代码应该适合您,因为当您单击 textField 时,scrollView 应该滚动以使 textField 框架可见。
    【解决方案2】:
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        -(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 类型的实例变量

        【讨论】:

          猜你喜欢
          • 2017-12-04
          • 1970-01-01
          • 1970-01-01
          • 2020-01-18
          • 1970-01-01
          • 2019-10-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多