关于ios:开始编辑时,Textfield在键盘后消失

Textfield disappears behind keyboard when start editing

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

我为一个目标C项目找到了几个解决方案。不幸的是,我使用的是mono-touch/c。

我已经为textfield创建了一个委托。我应该在方法"public override void editingstarted(uitextfield textfield)"中添加什么才能使此工作正常?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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)
    }
}


作为一个例子,这就是如何用objc解决它。这里,我只是移动包含文本字段的视图,使其可见(也许您可以将此代码转换为mono/c)。

1
2
3
4
5
6
7
8
9
10
- (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;
    }
}

我在CloseTextFieldDelegate类中使用以下方法解决了该问题:

1
2
3
4
5
6
7
8
9
10
11
12
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);
        }
    }

我不认为这是最好的解决办法,但它很管用。