Unity 6.3
0 онлайн 101 гостей 3 в системе
Вход
UI системы Шаг 184 из 317

Основные мероприятия

События фокуса происходят, когда элемент получает или теряет фокус.

События фокуса полезны, когда нужно передавать фокус визуальным элементам и забирать его. Элементы управления часто используют события фокуса, чтобы менять своё содержимое в зависимости от состояния фокуса. Например, текстовое поле может показывать текст-заполнитель, когда оно не в фокусе, или может реагировать на FocusInEvent, чтобы очистить текст замены.

Фокус может изменяться на визуальном элементе в результате взаимодействия пользователя, например, при нажатии клавиши Tab или щелчка, или при использовании скриптов C# с element.Focus().

Основные мероприятия подразделяются на два отдельных типа:

  • FocusOutEvent и FocusInEvent отправляются вдоль пути распространения непосредственно перед изменением фокуса.
  • FocusEvent и BlurEvent отправляются на цель события сразу же после изменения фокуса.

Базовый класс для всех событий фокуса — FocusEventBase.

В нижеследующей таблице описываются события фокуса и фазы их распространения:

Мероприятие Описание Просыпается Пузырьки вверх Аннулируемые
FocusOutEvent Отправляется до того, как элемент потеряет фокус. Да Да Нет
FocusInEvent Отправляется до того, как элемент получает фокус. Да Да Нет
BlurEvent Отправляется после того, как элемент потерял фокус. Да Нет Нет
FocusEvent Отправляется после того, как элемент получил фокус. Да Нет Нет

Уникальные свойства

В следующем разделе объясняются соответствующие свойства, уникальные для событий фокуса. Это не полный список всех свойств в семействе событий фокуса. Полный список см. в FocusEventBase.

relatedTarget: Содержит визуальный элемент, который является вторичным объектом события. Для событий FocusOut и Blur он содержит элемент, который получает фокус. Для событий FocusIn и Focus он содержит элемент, который теряет фокус.

Мероприятие Цель relatedTarget
Размытие Элемент, который теряет фокус. Элемент, который приобретает фокус.
Фокус Элемент, который приобретает фокус. Элемент, который теряет фокус.
focusIn Элемент, который приобретает фокус. Элемент, который теряет фокус.
focusOut Элемент, который теряет фокус. Элемент, который приобретает фокус.

Список событий

FocusOutEvent

FocusOutEvent отправляется, когда элемент собирается потерять фокус.

target: Элемент, который потеряет фокус.

relatedTarget: Элемент, который получит фокус.

FocusInEvent

FocusInEvent отправляется, когда элемент собирается получить фокус.

target: Элемент, который получит фокус.

relatedTarget: Элемент, который потеряет фокус.

BlurEvent

BlurEvent отправляется после того, как элемент потерял фокус.

target: Элемент, который потерял фокус.

relatedTarget: элемент, который получил фокус.

FocusEvent

FocusEvent отправляется после того, как элемент получает фокус.

target: элемент, который получил фокус.

relatedTarget: Элемент, который потерял фокус.

Примеры

В следующем примере показано, как использовать текст замены в текстовом поле. Когда текстовое поле находится в фокусе, FocusInEvent запускает и очищает текст замены. FocusOutEvent переключает режим замены в зависимости от содержимого текстового поля.


using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;

public class PlaceHolderExample : EditorWindow
{
    [MenuItem("Window/UI Toolkit/PlaceHolderExample")]
    public static void ShowExample()
    {
        PlaceHolderExample wnd = GetWindow<PlaceHolderExample>();
        wnd.titleContent = new GUIContent("PlaceHolderExample");
    }

    // Tracks whether the placeholder text is currently shown.
    private bool placeHolderMode = true;
    // The placeholder text to display when the field is empty.
    private const string placeHolderText = "Write here";

    public void CreateGUI()
    {
        // Create a new TextField and set its value to the placeholder text.
        TextField textField = new TextField();
        textField.value = placeHolderText;
        rootVisualElement.Add(textField);

        // Register callbacks for focus in and out events to manage placeholder behavior.
        textField.RegisterCallback<FocusInEvent>(OnFocusInTextField);
        textField.RegisterCallback<FocusOutEvent>(OnFocusOutTextField);
    }

    // Called when the TextField receives focus.
    private void OnFocusInTextField(FocusInEvent evt)
    {
        // If the placeholder is active, clear the text so the user can start typing.
        if (placeHolderMode)
        {
            var textField = evt.target as TextField;
            if (textField != null)
            {
                textField.value = "";
            }
        }
    }

    // Called when the TextField loses focus.
    private void OnFocusOutTextField(FocusOutEvent evt)
    {
        // If the field is empty after losing focus, restore the placeholder text.
        var textField = evt.currentTarget as TextField;
        if (textField != null)
        {
            placeHolderMode = string.IsNullOrEmpty(textField.value);
            if (placeHolderMode)
                textField.value = placeHolderText;
        }
    }
}

Дополнительные ресурсы