@DaNKuL

Как убрать ввод 2-ого символа в inputfield?

У меня есть TMP_Inputfield, и я использую кастомный валидатор

using System;
using System.Collections.Generic;
using TMPro;
using UnityEngine;

[Serializable]
[CreateAssetMenu(fileName = "InputValidator", menuName = "InputValidator", order = 51)]
public class InputValidator : TMP_InputValidator
{
    private int indexDot;
    private int countOfDots;

    public override char Validate(ref string text, ref int pos, char ch)
    {
        int countOfDot = 0;

        if (text != string.Empty)
        {
            int i = 0;

            foreach (var item in text)
            {
                if (item == '.')
                {
                    indexDot = i;
                }

                i++;
            }
        }
        else
        {
            indexDot = 0;
        }

        if (text != string.Empty)
        {
            foreach (var item in text)
            {
                if (item == '.')
                {
                    countOfDot++;
                }
            }
            CheckDots(countOfDot);
        }

        if (text != string.Empty && ch == '.' && countOfDot < 3)
        {
            if (text.Substring(text.Length - 1) != ".")
            {
                //text += ch;
                pos++;
                return ch;
            }
        }

        if (text.Length <= 3)
        {
            if (char.IsNumber(ch) && text.Length < 15)
            {
                if ((pos - indexDot) < 3)
                {
                    //text += ch;
                    pos++;
                    return ch;
                }
            }
        }
        else
        {
            if (char.IsNumber(ch) && text.Length < 15)
            {
                if ((pos - indexDot) < 4)
                {
                    //text += ch;
                    pos++;
                    return ch;
                }
            }
        }
        
        return (char)0;
    }

    private void CheckDots(int countOfDots)
    {
        this.countOfDots = countOfDots;
    }

    public int GetDots()
    {
        return countOfDots;
    }
}


Здесь специально комментарии на "text += ch;" я знаю что нужно использовать Insert, но он почему то не работает, но суть не в этом. Если убрать комментарии(я имею ввиду раскомментировать эти строчки), то на пк все нормально, но стоит перейти на телефон, и когда вводишь что то в этот inputfield, то символ вводится 2 раза, то есть вводишь допустим "1", а выводится "11", и удалить их нельзя, и вопрос что это такое? У меня есть подозрение что это из за "return ch", типо нужно использовать что то вроде "return (char)0", но не знаю, не проверял, это только предположение. И как если закомментировать те строчки, то на пк вообще нечего нельзя ввести
  • Вопрос задан
  • 50 просмотров
Решения вопроса 1
@DaNKuL Автор вопроса
Заместо "return ch;" использовать "return '\0';"
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы