我必须双按“return”键才能提交值! 它工作得很好,就像2个小时前一样(我只需按回一次),但后来我重新启动了Unity,现在我需要双击“return”来提交值。
更新#2
我有一个脚本附加到持有输入字段的画布上。 代码如下: -
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
}
}
当我播放场景并输入字段并按下第一个返回时,日志不会显示任何内容,但是当我再次按下它时会显示“已按下”。
更新#3
如果我删除,我找到了某种解决方案 “inputField.isFocused” 输入字段将检测第一个“返回”键。 但是,在我的情况下,如果输入字段中有一些文本,那么用户点击场景中的任何其他位置然后按Enter键,输入字段将提交它。
请咨询
答案 0 :(得分:4)
无需手动执行此操作。您需要使用事件系统来注册和接收来自InputField
的事件。注册InputField
以InputField.onEndEdit
提交活动,以便在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();
}
}
答案 1 :(得分:1)
void Update()
{
if (Input.GetKeyUp(KeyCode.Return)) { YourSubmitFunction(); }
}
答案 2 :(得分:0)
此问题的另一个解决方案是检查上一帧中的inputField.isFocused
,因为按下该按钮会使inputField.isFocused
变为false。