【问题标题】:Remove characters in inputfield in unity统一删除输入字段中的字符
【发布时间】:2018-07-06 13:42:58
【问题描述】:

我在一个场景中有一个输入字段,我需要一个像 MM/YY 这样的格式,当用户输入前两个整数时,/ 应该立即添加到第二个字符。所以我添加了以下代码 inputfield onvalueChanged 事件

 if (ExpiryDateInputField.text.Length == 2)
        {
            ExpiryDateInputField.text = ExpiryDateInputField.text + "/";

            ExpiryDateInputField.MoveTextEnd(false);
        }

这里的问题是,当我试图删除文本时,/ 之后的文本正在删除,但 / 之前的文本没有删除,我做错了。

例如:如果我输入 1234,输入字段将显示为 12/34,当我尝试删除输入的文本时,单击键盘上的退格键会删除 3 和 4,但 12/ 不会删除。有什么办法解决吗?

【问题讨论】:

  • 您可以尝试将“.text”替换为“.value”吗?
  • @Andreaジーティーオー,感谢您的建议。但我已将该字段作为公共 InputField ExpiryDateInputField;所以它没有显示.value。
  • 让我们想象一下12/ 在那里。如果您删除 /,那么长度将再次为 2。所以它再次添加它(因为这就是你的代码所做的)。它看起来好像没有移除它 - 但实际上它正在移除它,然后直接放回原处。您可以通过删除 1 来验证这一点 - 我敢打赌结果将是 2//

标签: c# unity3d input-field


【解决方案1】:

问题基本上是这样的。

您输入“12”,调用 OnValueChange 并添加“/”,现在您有“12/”。

按退格键删除“/”,调用 OnValueChange 并添加“/”,现在您有“12/”。

您可以尝试记住InputField 的最后一个值,如果该值包含“/”,则不要附加另一个“/”。

string last = string.Empty;

public void OnValueChange()
{
    if (ExpiryDateInputField.text.Length == 2 && !last.Contains("/"))
    {
         ExpiryDateInputField.text = ExpiryDateInputField.text + "/";

        ExpiryDateInputField.MoveTextEnd(false);
    }
    last = ExpiryDateInputField.text;
}

【讨论】:

  • 非常感谢@Fredrik Widerberg,这对我有很大帮助:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 1970-01-01
相关资源
最近更新 更多