Unity 输入法回车确定搜索 InputField.onSubmit InputField.onEndEdit

针对Unity中InputField组件的onSubmit方法无法正确响应输入法回车的问题,本文介绍了一种解决方案。通过扩展InputField组件并重写onSubmit方法,确保仅在用户明确提交时触发事件。实现方式包括创建InputFieldSubmit脚本,监听输入完成后的回车操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Unity InputField.onSubmit 替换 InputField.onEndEdit 输入法回车搜索

  • 不知道你是否在使用InputField.onEndEdit时发现一个问题,就是你输入法点击提交会执行该方法,输入时点击其他任何地方也会执行该方法,这是我们不需要的。
  • 我们想要的是只有我们在输入完成后点击提交的时候再执行,于是我们想到了InputField.onSubmit方法,于是问题又来了,这个方法怎么用,你会发现用不了。
  • 后来,你知道怎么用了,如果要用还是可以的,新建脚本继承InputField方法,重写onSubmit方法,你会发现问题又来了,当输入完成后点击确定,只是隐藏了输入框,并没有执行onSubmit,再次点击确定才会执行该方法,打包手机后相当于无效。
下面讲述解决办法
  • 1.需要对InputField组件进行扩展,重新定义onSubmit,创建脚本InputFieldSubmit
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;

[Serializable]
public class StringUnityEvent : UnityEvent<string>
{ }

[RequireComponent(typeof(InputField))]
public class InputFieldSubmit : MonoBehaviour
{
    public StringUnityEvent onSubmit;

    private InputField inputField;

    void Awake()
    {
        inputField = GetComponent<InputField>();
        inputField.lineType = InputField.LineType.MultiLineNewline;
    }

    void OnEnable()
    {
        inputField.onValidateInput += CheckForEnter;
    }

    void OnDisable()
    {
        inputField.onValidateInput -= CheckForEnter;
    }

    private char CheckForEnter(string text, int charIndex, char addedChar)
    {
        if (addedChar == '\n' && onSubmit != null)
        {
            onSubmit.Invoke(text);
            return '\0';
        }
        else
            return addedChar;
    }
}
  • 2.InputFieldSubmit这个脚本要挂载在 InputField组件上,如图:在这里插入图片描述
  • 3.逻辑调用
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class mytext : MonoBehaviour
{
    public InputFieldSubmit InputFieldSubmit;
    void Start()
    {
        InputFieldSubmit.onSubmit.AddListener(bb);
    }
    //提交后业务逻辑
    private void bb(string arg0)
    {
        throw new NotImplementedException();
    }
}
### Unity InputField 支持的事件类型 在 Unity 中,`InputField` 组件支持多种事件来响应用户的交互行为。这些事件可以通过 `EventTrigger` 或者直接通过脚本进行监听和处理。 #### 常见的事件类型有: - **OnValueChanged** 当输入字段中的文本发生变化时触发此事件。可以传递当前文本作为参数[^1]。 - **OnEndEdit** 用户结束编辑(例如失去焦点或者按下回车键)时触发该事件。同样能够获取最终输入的内容[^4]。 - **OnSubmit** 此事件会在用户提交表单时触发,在某些情况下可能与 OnEndEdit 行为相似,具体取决于平台和设备的行为。 对于更复杂的交互需求,还可以利用 `EventTrigger` 来添加其他类型的事件处理器,比如鼠标点击、拖拽等操作。需要注意的是,并不是所有的 EventTrigger 类型都适用于 InputField;通常只有一部分适合用于文本输入控件上的互动逻辑实现。 另外值得注意的是关于键盘显示方面的问题,当涉及到移动平台上虚拟键盘管理时,可能会遇到一些特殊挑战,如延迟等问题。这可能是由于第三方插件或其他因素引起的性能瓶颈所致[^3]。 ```csharp using UnityEngine; using UnityEngine.UI; public class InputFieldEvents : MonoBehaviour { public InputField myInputField; private void Start() { // 添加 OnValueChanged 事件监听器 myInputField.onValueChanged.AddListener(OnValueChangeHandler); // 添加 OnEndEdit 事件监听器 myInputField.onEndEdit.AddListener(OnEndEditHandler); } void OnValueChangeHandler(string newValue) { Debug.Log("Text has changed to: " + newValue); } void OnEndEditHandler(string finalValue) { Debug.Log("Editing ended with value: " + finalValue); } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值