【COCOS2DX-游戏开发之八】点击空白隐藏键盘

【COCOS2DX-游戏开发之八】点击空白隐藏键盘_第1张图片


cocos2dx edit编辑框点击后显示一个键盘,但是非常的不灵活,点return才能隐藏,如果我们需要点键盘外的背景,实现隐藏键盘,那就方便多了


方法:

1. 到EGLView.mm下 注释2个reurn,这样就能保证显示软键盘的时候,还能将点击事件传送到最底层

// Pass the touches to the superview
#pragma mark EAGLView - Touch Delegate
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    if (isKeyboardShown_)
    {
        [self handleTouchesAfterKeyboardShow];
        
        //WARNING:commented by Teng.点触背景隐藏软键盘
        //return;
    }
    
    int ids[IOS_MAX_TOUCHES_COUNT] = {0};
    float xs[IOS_MAX_TOUCHES_COUNT] = {0.0f};
    float ys[IOS_MAX_TOUCHES_COUNT] = {0.0f};
    
    int i = 0;
    for (UITouch *touch in touches) {
        ids[i] = (int)touch;
        xs[i] = [touch locationInView: [touch view]].x * view.contentScaleFactor;;
        ys[i] = [touch locationInView: [touch view]].y * view.contentScaleFactor;;
        ++i;
    }
    cocos2d::CCEGLView::sharedOpenGLView()->handleTouchesBegin(i, ids, xs, ys);
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    if (isKeyboardShown_)
    {
        <strong><span style="color:#ff0000;">//WARNING:commented by Teng.点触背景隐藏软键盘</span> 
        //return;</strong>
    }
    
    int ids[IOS_MAX_TOUCHES_COUNT] = {0};
    float xs[IOS_MAX_TOUCHES_COUNT] = {0.0f};
    float ys[IOS_MAX_TOUCHES_COUNT] = {0.0f};
    
    int i = 0;
    for (UITouch *touch in touches) {
        ids[i] = (int)touch;
        xs[i] = [touch locationInView: [touch view]].x * view.contentScaleFactor;;
        ys[i] = [touch locationInView: [touch view]].y * view.contentScaleFactor;;
        ++i;
    }
    cocos2d::CCEGLView::sharedOpenGLView()->handleTouchesEnd(i, ids, xs, ys);
}



2.最底层的layer类中添加处理:显示和隐藏键盘就OK了

void ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
{
    do 
    {
        if (mTelNumber) {
            CCPoint endPos = pTouch->getLocation();

            float delta = 5.f;
            if (::abs(mBeginPos.x - endPos.x) > delta
                || ::abs(mBeginPos.y - endPos.y) > delta) {
                    break;
            }

            // 看编辑框是否被点中
            CCPoint point = mTelNumber->getParent()->convertTouchToNodeSpaceAR(pTouch);

            // 锚点(0.f, 0.5f)
            //int x = mTextField->getParent()->getPosition().x;
            //int y = mTextField->getParent()->getPosition().y;
            int w = mTelNumber->getContentSize().width;
            int h = mTelNumber->getContentSize().height;
            CCRect rect = CCRect(0, -h/2, w, h);

            onClickedTextField(rect.containsPoint(point));
        }
    } while (0);

    DialogLayer::ccTouchEnded(pTouch, pEvent);
}

/** 点击推广码输入框 */
void onClickedTextField(bool b)
{
    if (b) {
        mTelNumber->attachWithIME();
    } else {
        mTelNumber->detachWithIME();
    }
}





参考文章:Cocos2d-x游戏开发之2.x后弹出键盘后无法响应除键盘外的触摸事件解决

参考文章:[iOS] UITextField隐藏软键盘心得(隐藏自身软键盘、点击Return自动转到下个文本框、轻触背景隐藏软键盘)

你可能感兴趣的:(cocos2dx,隐藏键盘,点击空白隐藏键盘)