cocos creator刷新原生端输入框的文本

cocos creator修改原生端输入框的文本

因为一些特殊需求需要限制原生的输入框的文本,所以去对引擎的一些文件进行修改;
当前只是对输入框进行赋值刷新,可以根据类似的写法增加其他逻辑;


修改引擎文件

  • resources\cocos2d-x\cocos\platform\android\java\src\org\cocos2dx\lib\Cocos2dxEditBox.java
    添加静态方法updateText,调用setTextKeepState,保持光标位置不变
public class Cocos2dxEditBox {
	...
   private static void updateText(String text){
       if (null != Cocos2dxEditBox.sThis) {
           Cocos2dxEditBox.sThis.mActivity.runOnUiThread(new Runnable() {
               @Override
               public void run() {
                   Cocos2dxEditBox.sThis.mEditText.setTextKeepState(text);
               }
           });
       }
   }
   ...
}
  • resources\cocos2d-x\cocos\scripting\js-bindings\manual\jsb_global.cpp
  1. 注册方法updateText
bool jsb_register_global_variables(se::Object* global)
{
	...
	__jsbObj->defineFunction("updateText", _SE(JSB_updateText));
	...
}
  1. 添加JSB_updateText方法实现
...
static bool JSB_updateText(se::State& s)
{
    EditBox::updateText(s.args[0].toString());
    return true;
}
SE_BIND_FUNC(JSB_updateText);
...
  • resources\.editors\Creator\2.4.3\resources\cocos2d-x\cocos\ui\edit-box\EditBox.h
    添加updateText声明,防止在jsb_global.cpp中报错
public:
	...
	static void updateText(std::string text);
	...
  • resources\.editors\Creator\2.4.3\resources\cocos2d-x\cocos\ui\edit-box\EditBox-android.cpp
    实现editbox的updateText方法,该方法调用Cocos2dxEditBox.java中的静态方法updateText
...
void EditBox::updateText(std::string text)
{
    JniHelper::callStaticVoidMethod(JCLS_EDITBOX, "updateText", text);
}
...

resources\engine\cocos2d\core\components\editbox\CCEditBox.js
添加方法updateNativeText,以便在项目开发中可以通过editbox组件调用该方法

let EditBox = cc.Class({
	...
    updateNativeText(text){
        if (this._impl) {
            this._impl.updateText(text);
        }
    }
    ...
})

可以在creator.d.ts中添加方法声明

export class EditBox extends Component {
	...	
	updateNativeText(text:string): void;
	...
}

build文件中

  • /jsb-link/jsb-adapter/jsb-builtin.js
    添加方法updateText,该方法调用在源生端jsb_global.cpp中注册的JSB_updateText方法
jsb.inputBox = {
	...
 	updateText: function updateText(text){
   		jsb.updateText(text);
 	}
}

  • /jsb-link/jsb-adapter/jsb-engine.js
    JsbEditBoxImpl注册方法updateText,该方法调用之前在jsb-builtin中添加在jsb.inputBox中的updateBox
 Object.assign(JsbEditBoxImpl.prototype,{
 	...
 	updateText(text){
      jsb.inputBox.updateText(text);
    },
    ...
 })
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值