`

NGUI 实现UIInput按字节长度限制输入

 
阅读更多

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;
    }

 

分享到:
评论

相关推荐

    NGUI-特效遮罩-脚本实现

    NGUI 粒子效果与特效 无法正常显示解决方案

    NGUI实现Tab键切换Input焦点

    NGUI实现Tab键切换Input焦点,通过挂载脚本到父节点上,进行自动切换

    NGUI点击关闭/销毁当前窗口

    NGUI右键关闭(销毁)当前窗口,用于Unity游戏关闭当前窗口

    Ngui实现摇杆

    利用Ngui实现虚拟摇杆操作,流畅的单摇杆操作

    Unity插件NGUI实现按键持续响应

    网上没找到NGUI按钮持续响应的解决办法,就自己试着写了一个,亲测可用,语言为c#,本人只为得点积分,请不要随意上传,谢谢合作。

    U3DNGUI.pdf

    总结来说,NGUI是Unity3D中实现高质量UI界面的强大工具,涵盖了UI布局、动画、事件处理、输入管理等多个方面的知识。开发者在使用NGUI进行UI开发时,需要掌握如何高效地管理图集、如何设置按钮和事件监听、如何利用...

    NGUI2.0插件

    5. **多语言支持**:通过UIInput和UILabel,可以轻松实现多语言切换。 四、实战应用 在实际项目中,NGUI2.0常用于创建菜单系统、角色信息面板、游戏提示等。例如,开发者可以通过设置UIGrid和UILabel快速构建一个...

    NGUI3.7.3unitypackage

    2. **事件处理**:通过使用 Event System 和 Widget 的交互,NGUI 支持点击、滑动等各种用户交互,让开发者能够轻松处理用户输入。 3. **图集和精灵管理**:NGUI 自带图集(Atlas)功能,允许将多个图像合并到一张...

    NGUI3.6.4 最新版本NGUI ngui

    《NGUI 3.6.4:打造高效Unity3D移动界面的利器》 NGUI,全称为Next-Gen UI,是Unity3D游戏引擎中的一款广泛应用的界面系统插件,尤其在移动游戏开发领域备受青睐。其3.6.4版本作为官方发布的最新版,不仅集成了之前...

    NGUI监听事件的实现

    使用NGUI获取监听按钮等各种信息,本人经过最新整理和分析现有的网络资源,这个方法是最适用,也是最简单的一种。

    最新版本的NGUI插件NGUI Next-Gen UI 覆盖unity多个版本

    多个版本 NGUI Next-Gen UI是一款功能强大、灵活性高的UI插件,是当前最新版本的NGUI插件。它可以覆盖Unity的多个版本,包括Unity 5、...开发者可以使用Tween动画或使用代码编写动画逻辑,实现更加复杂的UI动画效果。

    NGUI版的虚拟摇杆

    【NGUI版的虚拟摇杆】是Unity3D游戏开发中的一个组件,它主要用于实现触屏设备上的游戏控制,提供类似传统游戏手柄的虚拟操作方式。在移动平台上,由于物理按键的缺失,虚拟摇杆成为了游戏操控的主要手段。NGUI...

    Unity NGUI

    10. **触摸支持**:对于移动平台,NGUI支持触摸操作,能够很好地适应不同设备的屏幕尺寸和输入方式。 虽然Unity在后续版本中引入了新的Unity UI系统(UGUI),但NGUI仍然在许多项目中被使用,特别是在处理复杂交互...

    NGUI离线文档

    NGUI离线文档是针对Unity游戏开发中NGUI框架的一个详细参考资料,主要基于3.7.5版本。NGUI是一个用户界面系统,专为Unity3D设计,它提供了丰富的UI组件和工具,使得开发者能够在2D和3D环境中创建出交互性强、视觉...

    NGUI Next-Gen UIv3.5.8

    在资源管理方面,NGUI支持UI对象的按需加载和卸载,这在处理大量UI元素时尤为重要,能有效减少内存占用,提高游戏性能。同时,NGUI的事件系统允许组件之间通过消息进行通信,简化了多组件协同工作的编程难度。 NGUI...

    NGUI 3.0.0工具手册

    《NGUI 3.0.0工具手册》是专为Unity开发者设计的一份详细指南,主要涵盖NGUI这一用户界面系统的新版本3.0.0的相关知识。NGUI是一款强大的UI解决方案,它允许开发者在Unity引擎中创建复杂、高性能且交互性强的用户...

    NGUI3.11.2

    4. **事件系统**:NGUI 自带事件系统,用户点击或交互时,可以通过脚本处理相应事件,实现与游戏逻辑的联动。 5. **性能优化**:NGUI 在3.11.2版本中继续优化了渲染效率,减少CPU和GPU的负担,尤其在处理大量UI元素...

    NGUI v3.12.1 2018 最新版NGUI

    《NGUI v3.12.1:2018年Unity UI系统深度解析》 NGUI,全称为Next-Gen UI,是一款专为Unity引擎设计的用户界面系统。在2018年,它发布了v3.12.1的最新版本,此更新旨在优化用户体验,提升性能,并增加新功能。作为...

    NGUI 2.8.2

    考虑到移动设备的性能限制,NGUI特别优化了触摸输入和手势识别,使开发者能轻松创建适应手机和平板设备的触控界面。 **8. 2D物理支持** NGUI还集成了2D物理系统,允许UI元素参与物理运算,例如碰撞检测,这对于创建...

    ToLua热更新NGUI

    本文将详细探讨如何利用ToLua框架实现NGUI的热更新,帮助开发者更高效地进行游戏维护和升级。 ToLua是针对Unity引擎的一个开源的Lua绑定库,它允许开发者使用Lua脚本语言来编写Unity的游戏逻辑,从而提高开发效率并...

Global site tag (gtag.js) - Google Analytics