zoukankan      html  css  js  c++  java
  • Unity编辑器

    Unity编辑器整理 - 输入控件聚焦问题

    EditorGUI的输入控件在聚焦后,如果在其他地方改变值,聚焦的框不会更新,而且无法取消聚焦,如下图:
    控件聚焦

    在代码中取消控件的聚焦

    取消聚焦的“时机”需要看具体情况,比如上图可以在按下“删除最后一个字符”按钮时取消,也可以通过按下ESC键或者的鼠标移出面板是取消聚焦。。。
    代码:

    text = EditorGUILayout.TextField("text:", text);
    if (GUILayout.Button("删最后一个字符")) {
        if (!string.IsNullOrEmpty(text)&& text.Length>0) {
            text = text.Substring(0, text.Length - 1);
        }
        //在需要时取消聚焦
        GUI.FocusControl(null);
        Repaint();
    }
    text = EditorGUILayout.TextField("text:", text);
    var e = Event.current;
    
    //鼠标离开窗口时,
    if (e.type == EventType.MouseLeaveWindow ) {
        GUI.FocusControl(null);//
    }
    
    //按esc键退出聚焦
    if(e.keyCode == KeyCode.Escape)
    {
        GUI.FocusControl(null);//
        Repaint();
    }

    多个控件,有复杂交互情况时,需要为控件指定一个聚焦名字,灵活操作聚焦逻辑,代码:

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

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

  • 相关阅读:
    Nagios经check_http监视web申请书server多个tomcat维修
    一个测试SQL2005数据库连接JSP档
    android 36 线程通信
    android 35 ListView增删改差
    android 34 ListView进阶
    android 33 对话框控件
    android 32 Gallery:横着滚动的列表
    android 31 GridView
    android 30 下拉列表框:ArrayAdapter和Spinner.
    android 29 ArrarAdapter数组适配器
  • 原文地址:https://www.cnblogs.com/CloudLiu/p/10746067.html
Copyright © 2011-2022 走看看