TextField 在cocos2d-x中怎么弹出软键盘

这个用cocostudio 做的控件怎么弹出软键盘

您好,请问您使用的是否是win32平台?如果是Win32则不会弹出虚拟键盘,因为win32不带虚拟的键盘,请直接输入。感谢您对cocos引擎的支持。

请问楼上的版主,如何在点击UITextField输入框后,显示软键盘只显示半屏,而且UITextField输入框能(其实是整个游戏界面)自动向上移!

Layer自动上移应该需要自己做吧,监听键盘的弹出和收起来实现,软键盘本身的大小cocos2dx应该控制不了。

请问如何监听键盘的弹出和收起?

如果想手动抬起键盘的话,TextField -> attchWithIME 这样就行了。抬起屏幕的话 TextField 自动做不到,需要手动改,要么你上移动UI的Node 要么你就直接调Java函数,在Java处理。, EditBox会自动做处理的

win32下
那怎么连光标都没有, 点击上去连提示文字也不会自动消失

如果用editbox的话 又会跳出来很丑的框

请问大家制作输入框时是怎么做的,如果用textfield这个控件,没有光标,这个自己封装可以,还要自己写函数让输入框上移,感觉这个控件不太好用;editbox这个控件,调用系统自己的输入框,还跑到了手机顶端,求解啊,大家是怎么做的输入框啊?

我这边最终是 自己写一个输入框的控件解决的

你自己写的输入框,请问你是怎么写的,能否给个思路?或代码给看一下,本人新手好多都不懂:14:

很久之前写的 cocos-js3.6的 不知道还能不能跑

/**

  • 自定义的输入框

/
EditBox = cc.Node.extend({
hit:/
*
* 提示文字
/
null,
ctor: function (p, placeholder, fontName, fontSize) {
this._super();
p.addChild(this);
this.initBackGround();
this.initTextField(placeholder, fontName, fontSize);
this.initLight();
this.addListener();
},
initBackGround:/
*
* 初始化背景
/
function(){
this.backGround = new cc.Sprite(res_public.login_edit);
this.backGround.setAnchorPoint(0, 0.5);
this.addChild(this.backGround);
},
initTextField:/
*
* 初始化输入框
*/
function(placeholder, fontName, fontSize){
this.tf = new ccui.TextField(placeholder, fontName, fontSize);
this.tf.setAnchorPoint(0, 0.5);
this.tf.setMaxLengthEnabled(true);
// 屏蔽默认点击,使用自定义点击

        this.tf.setTouchEnabled(false);
        this.tf.fontName = "Marker Felt";
        this.tf.fontSize = 30;
        this.tf.setTextColor(cc.color(0, 0, 0, 255));
        this.addChild(this.tf);
    },
    initLight:/**
     * 初始化光标
     */
        function(){
        this.light = new cc.LabelTTF("|",gg.fontName, 25);
        this.light.setColor(cc.color(0,0,0));
        this.light.setAnchorPoint(0, 0.5);
        this.addChild(this.light);
        var seq = cc.sequence(cc.fadeIn(0.3),cc.delayTime(0.3),cc.fadeOut(0.3));
        var forever = cc.repeatForever(seq);
        this.light.runAction(forever);
        this.hiddenLight();
    },
    setMaxLength:/**
     * 设置最大长度
     * 
     * @param length
     */
        function(length){
        this.tf.setMaxLength(length);
    },
    setHit:/**
     * 设置提示
     * 
     * @param strHit
     */
        function(strHit){
        this.hit = strHit;
        this.tf.setPlaceHolder(this.hit)
    },
    showHit:/**
     * 展示提示
     */
        function(){
        this.tf.setPlaceHolder(this.hit)
    },
    hiddenHit:/**
     * 隐藏提示
     */
        function(){
        this.tf.setPlaceHolder("")
    },
    setPasswordEnabled:/**
     * 是否作为密码展示
     * 
     * @param enable
     */
        function(enable){
        this.tf.setPasswordEnabled(enable);
    },
    setString:/**
     * 设置文字
     * 
     * @param str
     */
        function(str){
        this.tf.setString(str);
    },
    getString:function(){
        return this.tf.getString();
    },
    setPos:/**
     * 设置位置
     * 
     * @param width
     * @param height
     */
        function(width, height){
        this.x = width;
        this.y = height;
    },
    addListener:function(){
        // TextField 事件

        this.tf.addEventListener(this.textFieldEvent, this);
        // 点击事件

        cc.eventManager.addListener(cc.EventListener.create({
            event: cc.EventListener.TOUCH_ONE_BY_ONE,
            onTouchBegan: this.onTouchBegan.bind(this)
        }), this.backGround);
    },
    onTouchBegan:function(touch, event){
        var pos = cc.p(touch.getLocationX(),touch.getLocationY());
        var target = event.getCurrentTarget();
        if(cc.rectContainsPoint(target.getBoundingBoxToWorld(),pos)){
            setTimeout(function(){
                cc.log("获取焦点");
                this.tf.getVirtualRenderer().attachWithIME();
            }.bind(this), 0);
            this.showLight();
            return true;
        } else {
            setTimeout(function(){
                cc.log("失去焦点");
                this.tf.getVirtualRenderer().detachWithIME();
                this.showHit();
            }.bind(this), 0);
            this.hiddenLight();
            return false;
        }
    },
    showLight:/**
     * 出现光标闪烁
     */
        function(){
        this.light.setVisible(true);
        var sv = this.tf.getString();
        if(!!sv && sv.length > 0){
            this.light.setPositionX(this.tf.width - this.light.width * 0.5 + 1);
        } else {
            // 存在焦点

            this.light.setPositionX(this.light.width * 0.5);
            this.hiddenHit();
        }    
    },
    hiddenLight:/**
     * 隐藏光标
     */
        function(){
        this.light.setVisible(false);
    },
    textFieldEvent:/**
     * 各种事件
     */
        function(textField, type){
        switch (type) {
        case ccui.TextField.EVENT_ATTACH_WITH_IME:
            cc.log("attach with IME");
            this.showLight();
            break;
        case ccui.TextField.EVENT_DETACH_WITH_IME:
            cc.log("detach with IME");
            this.hiddenLight();
            break;
        case ccui.TextField.EVENT_INSERT_TEXT:
            cc.log("insert words");
            this.showLight();
            break;
        case ccui.TextField.EVENT_DELETE_BACKWARD:
            cc.log("delete word");
            this.showLight();
            break;
        default:
            break;
        }
        cc.log(type);
    }

})