cocos2dx中输入框输入限制数字

来源:互联网 发布:中国科大 网络通 Nico 编辑:程序博客网 时间:2024/06/05 08:44

最近做斗牛的项目,需要处理一个输入框只能显示纯数字的文本,用的是cocos2dx自带的EditBox。虽然设置了输入属性为cc.EDITBOX_INPUT_MODE_NUMERIC,但是弹出的框中仍然可以切换输入’,.之类的字符。虽然可以在delegate中重写editBoxEditingDidEnd函数,但是这已经是在输入结束时进行的检测。后来看了下可以重写editBoxTextChanged事件,这样就能实时检测啦。

代码如下:

editBoxTextChanged: function(sender, str) {        

        if (sender == this.Text_gold) {             

            if(str.length<1)return;   

            var replaceStr =    str.replace(/[^\d]/g,'');

            if(replaceStr == str)return;            

            this.Text_gold.setString(replaceStr);           

            

        }

    },

这样处理后,虽然能保证结果,但是遇到了2个问题。

问题一: 在安卓上面在editBoxTextChanged函数中使用setString会死循环,因为setString时也会触发editBoxTextChanged函数,使用代码中加了判断if(replaceStr == str)return; 


问题二:在editBoxTextChanged中使用setString会出现重影,输入框中会有2个文本同时显示。后来看了一下源码,发现里面一个文本是系统自带的一个文本框,这个框会在输入时显示,还有一个是EditBox用于显示文本的框,这个框会在setText时显示详见EditBoxImplCommon。知道问题后,就很好解决问题啦。对EditBoxImplCommon的setText进行了小小的修改。只有在非编辑状态(isEditing函数可用),才刷新第二个文本框,代码如下:



voidEditBoxImplCommon::setText(constchar* text)

{

    this->setNativeText(text);

    _text = text;

    //编辑状态时不需要刷新显示否则会重影 ivy modify 2017.9.13

    if(!isEditing()){

        refreshInactiveText();

    }    

}


功能虽小,遇到问题也得花费一点时间来解决,故Mark一下