输入控件聚焦问题

Q:输入控件在聚焦后,如果在其他地方改变其值(例如代码中),聚焦的控件内容不会更新,而且无法取消聚焦。

A:取消聚焦的时机可以是按钮按下时、ESC键或者鼠标移出面板等。取消聚焦的代码:

GUI.FocusControl(null);
Repaint();//有时需要重绘

多个控件,有复杂交互时,可以为控件指定一个聚焦名字:

GUI.SetNextControlName("mytext:");//指定下一控件用于控制聚焦的名字
text = EditorGUILayout.TextField("text", text);
var rect = GUILayoutUtility.GetLastRect();
var e = Event.current;
if (e.type == EventType.MouseDown //当鼠标点击时
    && !rect.Contains(e.mousePosition) //鼠标不在控件范围内时
    && GUI.GetNameOfFocusedControl() == "mytext:") { //判断控件处于聚焦状态时
    GUI.FocusControl(null);
}

另外也可以使用GUIUtility.keboardControl来获取当前键盘聚焦的控件id

posted @ 2019-03-21 18:03  蓝闪  阅读(337)  评论(0编辑  收藏  举报