- Home /
GUI Remove focus from an editor text field when clicking elsewhere.
How do you remove the focus from an editor text field when the user clicks outside of it? I know you can set the control focus to null; what I'm not sure about is how to know if the mouse click is outside the focused text field.
As a side note, the text fields are in an editor script, and they are generated on demand; they are not static, rather their amount and position changes as needed.
Answer by Quatum1000 · Jul 19, 2015 at 07:12 PM
Hi,
I read through several posts and I found a working solution after some hours.
I ran into the problem that a focus on a Textfield was not removed while clicking anywhere on the main editor window. This cause many issues if you want to create a editor window with clickable areas, but non GUI elements. I wrote a EditorWindow tool to control about 100 variables over a day and night cycle with manually drawn animation curves.
using UnityEngine;
using UnityEditor;
public class Test : EditorWindow {
public string s;
public Rect windoClickArea = new Rect(0, 0, 200, 200);
[MenuItem("Window/Test")]
static void Init() {
// Get existing open window or if none, make a new one:
Test window = (Test)EditorWindow.GetWindow(typeof(Test));
window.Show();
}
void OnGUI() {
// define click area
Event e = Event.current;
windoClickArea = GUI.Window(0, windoClickArea, drawWindow, "MyWindow");
if (e.type == EventType.MouseDown && windoClickArea.Contains(e.mousePosition)) {
Debug.Log("click");
GUI.FocusControl(null);
}
//click area visible
EditorGUI.DrawRect(windoClickArea, Color.gray);
// Any Text Field over the predefined click area
s = EditorGUILayout.TextField("", s);
}
void drawWindow(int aID) {
// it's a dummy proc
}
}
Activate the focus on the textfield and click on the lite gray area.
Answer by tinysnake · Jul 27, 2019 at 03:07 AM
@Quatum1000 's code will work in Unity 2017.4, but It takes seconds to deselect the window, I have better solution inspired by him.
//make sure the following code is at the very end of OnGUI Function
if (GUI.Button(theWholeWindowRect, "", GUIStyle.none))
{
GUI.FocusControl(null);
}
Your answer
Follow this Question
Related Questions
UI vs Scripts question - what's where? 3 Answers
Script work in editor but not in build 0 Answers
Editor: Force Hand tool 2 Answers
'MouseLook.sensitivityX' is inaccessible due to its protection level. 2 Answers
Drag an UI slider (no Unity GUI) 1 Answer