失去焦点时如何保持InputField键盘打开?

时间:2019-04-12 04:15:51

标签: c# android unity3d

我正在做一个打字游戏,用户输入落在屏幕上的单词,并且我在顶部有一个按钮,当用户按下它们时,它们会用作加电功能(核弹,冻结等)。 / p>

现在,当用户单击屏幕顶部的加电按钮之一时,在ButtonClicked重新打开之前,键盘将暂时关闭。 如何做到这一点,以便当用户单击顶部的按钮之一时,键盘始终保持打开状态?

当前,我在按钮上添加了一个监听器,它将重新打开键盘。

myButton.onClick.AddListener(ButtonClicked);

void ButtonClicked()
{
    //DoStuff();
    inputField.ActivateInputField();
}

这是现在的样子。我必须单击一次以摆脱键盘,然后再次单击按钮。

https://imgur.com/a/WTLLYEX

我尝试使用自定义类重写某些InputField函数,但无济于事。

public class CustomInputField: InputField
{ 
     public override void OnDeselect(BaseEventData eventData)
     {
         Debug.Log ("Overrides InputField.Deselect");
     }

     public override void DeactivateInputField()
     {
         Debug.Log ("Overrides InputField.DeactivateInputField");
     }

}

第一种方法无法实现我想要的功能,第二种方法DeactivateInputField()给了我

  

错误CS0506:CustomInputField.DeactivateInputField': cannot override inherited member InputField.DeactivateInputField',因为它没有标记为虚拟,抽象或覆盖。

任何帮助将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用TouchScreenKeyboard.open功能使键盘保持打开状态(此处是Unity手册的链接:https://docs.unity3d.com/ScriptReference/TouchScreenKeyboard.Open.html)。然后,我也会尝试不为此使用Update,在脚本中应该有另一种方式。

您的错误否则可能是由于您尝试覆盖一个函数而导致的错误,该函数说的错误不是Virtual Abstract或Override,因此不允许您这样做。为此,这是一个Unity类,因此您也将无法对此进行更改。

您可以尝试的另一种方法是LateUpdate,虽然它并不完美,但可以在以下示例中帮助您解决问题:

LateUpdate()
{
if(!TouchScreenKeyboard.visible)
          TouchScreenKeyboard.Open()/inputField.ActivateInputField();
};

答案 1 :(得分:0)

输入字段将打开系统键盘,并且您对其的控制受到限制。如果您是我,我会在我的应用程序中创建UI键盘,该键盘可以通过任何方式进行自定义,并且可以保证在不同设备/系统上的结果相同。