Files
MuHua-UIElements/Packages/UITool/Runtime/ModuleUIElement/UITextField.cs
T
2025-08-28 14:24:09 +08:00

58 lines
1.9 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
namespace MuHua {
/// <summary>
/// 文本输入字段
/// </summary>
public class UITextField : TextField {
public new class UxmlFactory : UxmlFactory<UITextField, UxmlTraits> { }
public new class UxmlTraits : TextField.UxmlTraits {
public UxmlStringAttributeDescription DefaultPrompt = new UxmlStringAttributeDescription {
name = "default-prompt"
};
public override void Init(VisualElement ve, IUxmlAttributes bag, CreationContext cc) {
UITextField textField = (UITextField)ve;
textField.DefaultPrompt = DefaultPrompt.GetValueFromBag(bag, cc);
textField.SetDefaultPrompt();
base.Init(ve, bag, cc);
}
}
public string DefaultPrompt { get; set; }
public VisualElement inputElement => this.Q<VisualElement>("unity-text-input");
public VisualElement textElement => inputElement.Q<VisualElement>("");
public UITextField() {
ClearClassList();
AddToClassList("input-field");
labelElement.ClearClassList();
labelElement.AddToClassList("unity-text-element");
labelElement.AddToClassList("input-field-label");
inputElement.ClearClassList();
inputElement.AddToClassList("input-field-box");
textElement.ClearClassList();
textElement.AddToClassList("unity-text-element");
textElement.AddToClassList("input-field-text");
RegisterCallback<FocusInEvent>((evt) => { PrepareInput(); });
RegisterCallback<FocusOutEvent>((evt) => { SetDefaultPrompt(); });
}
public void PrepareInput() {
textElement.RemoveFromClassList("input-field-text-d");
if (text != DefaultPrompt) { return; }
text = "";
}
public void SetDefaultPrompt() {
textElement.RemoveFromClassList("input-field-text-d");
if (value != "") { return; }
text = DefaultPrompt;
textElement.AddToClassList("input-field-text-d");
}
}
}