当选中特定元素时,iOS会保持键盘打开

时间:2016-10-06 14:29:09

标签: ios xamarin.ios xamarin.forms uikeyboard

我有一个UITextView和一个按钮。 我需要在用户点击按钮时键盘保持打开状态。

我尝试使用ShouldEndEditing函数返回False,但用户再也无法关闭键盘。

有什么想法吗?

我正在使用Xamrin Forms。

2 个答案:

答案 0 :(得分:0)

在Objective-C中,你可以在视图控制器中设置一个完成编辑事件,它会立即重新打开键盘..没有任何视觉变化。

-(IBAction) textFieldDoneEditing : (id) sender{
    [sender resignFirstResponder];
    [sender becomeFirstResponder];
}

Xamarin / C#等同于我的头顶。

txtMyTextBox.Ended += (sender, e) =>
{
    txtMyTextBox.ResignFirstResponder();
    txtMyTextBox.BecomeFirstResponder();
};

答案 1 :(得分:0)

啊,有趣的问题,你已经知道了该物业" ShouldEndEditing"在UITextFieldDelegate中,为什么不尝试为UITextField实现自定义委托?

我为你写了一个示例,我使用UISwitch来模拟隐藏键盘的条件,在ViewController中,使用下面的代码:

public override void ViewDidLoad ()
        {
            MYTextFieldDelegate myDel = new MYTextFieldDelegate ();

            UITextField textTF = new UITextField ();
            textTF.Frame = new CoreGraphics.CGRect (50, 50, 200, 40);
            textTF.BackgroundColor = UIColor.Red;
            textTF.Delegate = myDel;
            this.Add (textTF);

            UIButton btnTest = new UIButton (UIButtonType.System);
            btnTest.SetTitle ("Test", UIControlState.Normal);
            btnTest.Frame = new CoreGraphics.CGRect (50, 100, 200, 40);
            btnTest.TouchUpInside += delegate {
                this.View.EndEditing (true);
            };
            this.Add (btnTest);

            UISwitch keyboardSwitch = new UISwitch ();
            keyboardSwitch.Frame = new CoreGraphics.CGRect (50, 150, 200, 40);
            keyboardSwitch.ValueChanged += (sender, e) => {
                bool flag = (sender as UISwitch).On;
                myDel.FlagForDisplayKeyboard = flag;
            };
            this.Add (keyboardSwitch);
        }

这是MYTextFieldDelegate.cs:

class MYTextFieldDelegate : UITextFieldDelegate
    {
        public bool FlagForDisplayKeyboard { get; set; }

        public override bool ShouldEndEditing (UITextField textField)
        {
            return FlagForDisplayKeyboard;
        }

        public MYTextFieldDelegate ()
        {
            FlagForDisplayKeyboard = false;
        }
    } 

希望它可以帮到你。