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

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组件上,如图:Unity 输入法回车确定搜索 InputField.onSubmit InputField.onEndEdit_第1张图片
  • 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.onSubmit InputField.onEndEdit)