首页 > 代码库 > cocos2dx 2.2.5 CCEditBox IOS 适配问题

cocos2dx 2.2.5 CCEditBox IOS 适配问题

CCEditBox 在IPad上显示正常的, 但是 点击后进入编辑状态时,里面的文字没有适配,还是IPhone那样小!

 

首先在 CCEditBox 源文件找到 如下的函数:

void CCEditBox::touchDownAction(CCObject *sender, CCControlEvent controlEvent){    m_pEditBoxImpl->openKeyboard();}

很明显示,这里是打开键盘(除非你的英语不过关吧!)!这里  m_pEditBoxImpl  是  CCEditBoxImpl 类!

直接转到这个类的头文件里,在这里找到了openKeyboard() 这个函数,是一个虚函数:

virtual void openKeyboard() = 0;

 

然后,找到  CCEditBoxImplIOS 这个类的头文件,这个类是继承了 CCEditBoxImpl 类 

然而在这个头文件里找到了一个openKeyboad 函数:(这个函数是用Objective-C 写的)

-(void) openKeyboard;

 

打开 CCEditBoxImplIOS 的源文件, 然后找到最下面的一个函数实现:(很熟悉吧,没错,这个就是CCEditBoxImpl类里的虚函数! 在CCEditBoxImplIOS源文件里重写了!)

void CCEditBoxImplIOS::openKeyboard(){	m_pLabel->setVisible(false);	m_pLabelPlaceHolder->setVisible(false);	m_systemControl.textField.hidden = NO;        [m_systemControl openKeyboard];}

 最后调用到 [m_systemControl openKeyboard]; 函数的实现如下,这里是Objective-C的代码,我们可以再这里修改;最后我选择在  CCEditBoxImplIOS 的覆盖函数里面修改;

-(void) openKeyboard{    [[EAGLView sharedEGLView] addSubview:textField_];    [textField_ becomeFirstResponder];}

 我们游戏的设计屏幕大小是 960*640;首先得到屏幕X与Y的缩放的倍数;然后取得标准拉伸倍数

    CCDirector* pDirecotr = CCDirector::sharedDirector();    float scaleX = pDirecotr->getWinSizeInPixels().width / 960;    float scaleY = pDirecotr->getWinSizeInPixels().height / 640;    float scale = scaleX > scaleY ? scaleY : scaleX;            // 得到标准拉伸倍数

 

然后将 m_systemControl.textField 的大小乘以  标准拉伸大小scale,再设置 m_systemControl.textField 的font 的大小 乘以 标准拉伸scale

直接上代码了:

void CCEditBoxImplIOS::openKeyboard(){	m_pLabel->setVisible(false);	m_pLabelPlaceHolder->setVisible(false);        /*******     ***   add by author: zero     ***   description : CCEditBox 适配问题,这里只是IOS的     *******/    CCDirector* pDirecotr = CCDirector::sharedDirector();    float scaleX = pDirecotr->getWinSizeInPixels().width / 960;    float scaleY = pDirecotr->getWinSizeInPixels().height / 640;    float scale = scaleX > scaleY ? scaleY : scaleX;    CGSize size = [m_systemControl.textField frame].size;    [m_systemControl setContentSize:CGSizeMake(size.width * scale, size.height * scale)];        // m_isFirstTouch 是 头文件定义的bool类型变量,初始化列表中设置值为true;    // 第一次进来的时候才设置m_systemControl.textField的size,不然的话,每点击一次字段就变大一次!    if (m_isFirstTouch)        {        CGFloat height = m_systemControl.textField.font.pointSize;        m_systemControl.textField.font = [UIFont systemFontOfSize:height*scale];        m_isFirstTouch = false;    }	m_systemControl.textField.hidden = NO;    [m_systemControl openKeyboard];}

  这样放上去后,就可以了!适配已经完美了!

cocos2dx 2.2.5 CCEditBox IOS 适配问题