Unity 5.3 - 输入字段在按下时不会检测到第一个 "return" 键
Unity 5.3 - Input field wont detect first "return" key when pressed
我必须按两次 "return" 键才能提交值!
它在 2 小时前工作正常(我只需要按 return 一次),但后来我重新启动了 Unity,现在我需要双击 "return" 才能提交值。
更新 #2
我有一个附加到 canvas 的脚本,它包含输入字段。
代码如下:-
public class Example: MonoBehaviour {
public InputField inputField;
void Start () {
}
void Update () {
HandleUserInput ();
}
void HandleUserInput()
{
if (inputField.isFocused && inputField.text != "" && (Input.GetKey (KeyCode.Return) || Input.GetKey(KeyCode.KeypadEnter))) {
Debug.Log ("Pressed");
//Do stuff
inputField.text = ""; //Clear Inputfield text
inputField.ActivateInputField(); //Re-focus on the input field
inputField.Select ();//Re-focus on the input field
}
}
当我播放场景并在字段中键入并按第一个 return 时,日志不会显示任何内容,但当我再次按它时它显示 "Pressed"。
更新#3
我找到了某种解决方案,如果我删除
"inputField.isFocused"
输入字段将检测第一个 "Return" 键。
但是,在我的例子中,如果输入字段中有一些文本,然后用户单击场景中的其他任何地方,然后按回车键,输入字段将提交它。
请指教
无需手动执行此操作。您需要使用事件系统来注册和接收来自 InputField
的事件。使用 InputField.onEndEdit
注册 InputField
提交事件,以便在 InputField
上有提交时获得回调。您还可以使用 inputField.onValueChanged
检查输入何时更改。您可以在回调函数中执行 null
检查:
public class Example: MonoBehaviour
{
public InputField inputField;
void Start()
{
}
void Update()
{
}
//Called when Input changes
private void inputSubmitCallBack()
{
Debug.Log("Input Submitted");
inputField.text = ""; //Clear Inputfield text
inputField.ActivateInputField(); //Re-focus on the input field
inputField.Select();//Re-focus on the input field
}
//Called when Input is submitted
private void inputChangedCallBack()
{
Debug.Log("Input Changed");
}
void OnEnable()
{
//Register InputField Events
inputField.onEndEdit.AddListener(delegate { inputSubmitCallBack(); });
inputField.onValueChanged.AddListener(delegate { inputChangedCallBack(); });
}
void OnDisable()
{
//Un-Register InputField Events
inputField.onEndEdit.RemoveAllListeners();
inputField.onValueChanged.RemoveAllListeners();
}
}
这个问题的另一个解决方案是从上一帧检查inputField.isFocused
,因为按下按钮会使inputField.isFocused
变为false。
就这么简单
void Update()
{
if (Input.GetKeyUp(KeyCode.Return)) { YourSubmitFunction(); }
}
我必须按两次 "return" 键才能提交值! 它在 2 小时前工作正常(我只需要按 return 一次),但后来我重新启动了 Unity,现在我需要双击 "return" 才能提交值。
更新 #2
我有一个附加到 canvas 的脚本,它包含输入字段。 代码如下:-
public class Example: MonoBehaviour {
public InputField inputField;
void Start () {
}
void Update () {
HandleUserInput ();
}
void HandleUserInput()
{
if (inputField.isFocused && inputField.text != "" && (Input.GetKey (KeyCode.Return) || Input.GetKey(KeyCode.KeypadEnter))) {
Debug.Log ("Pressed");
//Do stuff
inputField.text = ""; //Clear Inputfield text
inputField.ActivateInputField(); //Re-focus on the input field
inputField.Select ();//Re-focus on the input field
}
}
当我播放场景并在字段中键入并按第一个 return 时,日志不会显示任何内容,但当我再次按它时它显示 "Pressed"。
更新#3
我找到了某种解决方案,如果我删除 "inputField.isFocused" 输入字段将检测第一个 "Return" 键。 但是,在我的例子中,如果输入字段中有一些文本,然后用户单击场景中的其他任何地方,然后按回车键,输入字段将提交它。
请指教
无需手动执行此操作。您需要使用事件系统来注册和接收来自 InputField
的事件。使用 InputField.onEndEdit
注册 InputField
提交事件,以便在 InputField
上有提交时获得回调。您还可以使用 inputField.onValueChanged
检查输入何时更改。您可以在回调函数中执行 null
检查:
public class Example: MonoBehaviour
{
public InputField inputField;
void Start()
{
}
void Update()
{
}
//Called when Input changes
private void inputSubmitCallBack()
{
Debug.Log("Input Submitted");
inputField.text = ""; //Clear Inputfield text
inputField.ActivateInputField(); //Re-focus on the input field
inputField.Select();//Re-focus on the input field
}
//Called when Input is submitted
private void inputChangedCallBack()
{
Debug.Log("Input Changed");
}
void OnEnable()
{
//Register InputField Events
inputField.onEndEdit.AddListener(delegate { inputSubmitCallBack(); });
inputField.onValueChanged.AddListener(delegate { inputChangedCallBack(); });
}
void OnDisable()
{
//Un-Register InputField Events
inputField.onEndEdit.RemoveAllListeners();
inputField.onValueChanged.RemoveAllListeners();
}
}
这个问题的另一个解决方案是从上一帧检查inputField.isFocused
,因为按下按钮会使inputField.isFocused
变为false。
就这么简单
void Update()
{
if (Input.GetKeyUp(KeyCode.Return)) { YourSubmitFunction(); }
}