Как сохранить клавиатуру InputField открытой при потере фокуса?

1

Я создаю игру, в которой пользователь печатает слова, которые падают на экран, и у меня есть кнопки вверху, которые действуют как бонусы (нюки, замораживание и т.д.), Когда пользователь нажимает их.

Теперь, когда пользователь нажимает одну из кнопок включения питания в верхней части экрана, клавиатура на мгновение закрывается, прежде чем 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', поскольку он не помечен как виртуальный, абстрактный или переопределенный.

Любая помощь будет принята с благодарностью, спасибо!

Теги:
unity3d

2 ответа

0

Поле ввода открывает системную клавиатуру и ваш контроль над ней ограничен. Если бы я был тобой, я бы создал в своем приложении пользовательскую клавиатуру, которую можно было бы настроить любым способом и гарантировать одинаковые результаты на разных устройствах/системах.

  • 0
    Я хочу, чтобы отображалась родная клавиатура пользователя, чтобы он мог практиковаться в наборе на клавиатуре, которую он использует в своей повседневной жизни. Есть ли способ заставить это работать без создания другой клавиатуры?
  • 0
    Я вижу смысл. Ну, попробуйте с Raycast, может быть, вы сможете мгновенно запустить луч и запустить действие, но я не проверял.
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();
};
  • 0
    Я обновил вопрос с видео и некоторыми уточнениями. Я также попытался использовать TouchScreenKeyboard.Open() вместо InputField, но проблема осталась.
  • 0
    Хорошо, тогда я не уверен насчет проблемы. Я просто обновляю свой ответ немного с моей последней идеей в теме

Ещё вопросы

Сообщество Overcoder
Наверх
Меню