输入控件聚焦问题
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
蓝闪的博客
http://www.cnblogs.com/stan-si/