UIInput按字节长度限制输入
(汉字算2个字节,数字字母算1个字节)
如果需要限制20个汉字,就需要在页面上配置限制40个字符了。
而数字、字母等都是1个算一个字节,而汉字等算2个字节。
-
方法一:在UIInput中进行修改
①增加下面的方法
protected int GetStringByteLength(string str)
{
byte[] bytestr = System.Text.Encoding.Default.GetBytes(str);
return bytestr.Length;
}
②修改下面的方法
public string Validate(string val)
{
if (string.IsNullOrEmpty(val)) return "";
StringBuilder sb = new StringBuilder(val.Length);
for (int i = 0; i 0 && this.GetStringByteLength(val) >= characterLimit)
{
do
{
val = val.Substring(0, val.Length - 1);
} while (this.GetStringByteLength(val) > characterLimit);
}
return val;
}
③修改下面的方法
protected virtual void Insert(string text)
{
string left = GetLeftText();
string right = GetRightText();
int rl = right.Length;
StringBuilder sb = new StringBuilder(left.Length + right.Length + text.Length);
sb.Append(left);
// Append the new text
for (int i = 0, imax = text.Length; i < imax; ++i)
{
// Can't go past the character limit
if (characterLimit > 0 && this.GetStringByteLength(sb.ToString()) +
this.GetStringByteLength(right) >= characterLimit) break;
// If we have an input validator, validate the input first
char c = text[i];
if (onValidate != null) c = onValidate(sb.ToString(), sb.Length, c);
else if (validation != Validation.None) c = Validate(sb.ToString(), sb.Length, c);
// Append the character if it hasn't been invalidated
if (c != 0) sb.Append(c);
}
// Advance the selection
mSelectionStart = sb.Length;
mSelectionEnd = mSelectionStart;
// Append the text that follows it, ensuring that it's also validated after the inserted value
for (int i = 0, imax = right.Length; i < imax; ++i)
{
char c = right[i];
if (onValidate != null) c = onValidate(sb.ToString(), sb.Length, c);
else if (validation != Validation.None) c = Validate(sb.ToString(), sb.Length, c);
if (c != 0) sb.Append(c);
}
mValue = sb.ToString();
UpdateLabel();
ExecuteOnChange();
}
- 方法二:在上层逻辑中实现(推荐此方法)
//下面的事件监听放入合适的方法中 调用
EventDelegate.Add(this.mInput.onChange, this.OnInputChange);
private void OnInputChange()
{
string str = this.mInput.value;
if (characterLimit > 0 && this.GetStringByteLength(str) > characterLimit)
{
do
{
str = str.Substring(0, str.Length - 1);
} while (this.GetStringByteLength(str) > characterLimit);
this.mInput.value = str;
}
}
private int GetStringByteLength(string str)
{
byte[] bytestr = System.Text.Encoding.Default.GetBytes(str);
return bytestr.Length;
}
本文介绍了两种在UIInput组件中实现按字节长度限制输入的方法。第一种是在UIInput内部进行修改,包括增加字符串字节长度计算方法,并在插入和验证过程中应用该方法;第二种是在上层逻辑中实现监听和限制。
1828

被折叠的 条评论
为什么被折叠?



