【问题标题】:Textfield disappears behind keyboard when start editing开始编辑时文本字段消失在键盘后面
【发布时间】:2013-02-19 18:51:01
【问题描述】:

我在滚动视图中有一个文本字段。 当我点击文本字段添加文本时,键盘弹出,文本字段消失在键盘后面。如何解决这个问题? 滚动视图应向下滚动,以便在键入时文本字段仍然可见。

我为一个 Objective-C 项目找到了几个解决方案。不幸的是,我使用的是 Mono Touch/C#。

我已经为文本字段创建了一个委托。 我应该在方法“public override void EditingStarted (UITextField textField)”中添加什么来使其工作?

public class CloseTextfieldDelegate : UITextFieldDelegate{
    private NewReportScreen controller;

    public CloseTextfieldDelegate(NewReportScreen newReportScreen)
    {
        controller = newReportScreen;
    }

    public override bool ShouldReturn (UITextField textField)
    {
        textField.ResignFirstResponder();
        return false;
    }

    public override void EditingStarted (UITextField textField)
    {
        //DO SOMETHING (MAKE TEXTFIELD VISIBLE SO IT DOESN'T DISAPPEARS BEHIND THE KEYBOARD)
    }
}

【问题讨论】:

    标签: ios xamarin.ios


    【解决方案1】:

    例如,这就是使用 ObjC 解决的方法。在这里,我只是移动包含文本字段的视图,使其可见(也许您可以将此代码转换为单声道/C#。

    - (void)textFieldDidBeginEditing:(UITextField *)textField
    {
    
        if (textField == myTf)
        {
            CGRect rect = inputFieldsView.frame;
            rect.origin.y = -100;//move the view that contains the TextFiled up
            inputFieldsView.frame = rect;
        }
    }
    

    【讨论】:

      【解决方案2】:

      我用 CloseTextfieldDelegate 类中的以下方法解决了这个问题:

      public override void EditingStarted (UITextField textField)  //used to scroll the scrollview when editing a textfield
          {
              var yPositionTextFieldDescription =  (newReportController.usedTextFieldDescription.Frame.Location.Y - 143);
              var yPositionTextFieldRoom =  (newReportController.usedTextFieldRoom.Frame.Location.Y - 143);   
      
              if (textField == newReportController.usedTextFieldDescription){ 
                  newReportController.usedScrollView.SetContentOffset (new PointF (0, yPositionTextFieldDescription), true);
              }
              else if (textField == newReportController.usedTextFieldRoom){
                  newReportController.usedScrollView.SetContentOffset (new PointF (0, yPositionTextFieldRoom), true);
              }
          }
      

      我认为这不是最好的解决方案,但效果很好。

      【讨论】:

        猜你喜欢
        • 2018-12-21
        • 2020-11-16
        • 1970-01-01
        • 2012-02-24
        • 2023-03-11
        • 2012-12-07
        • 2020-07-12
        • 2019-08-20
        • 2019-01-12
        相关资源
        最近更新 更多