文本框控件CCTextFieldTTF:
const char* getString(void); 获取当前字符串 bool attachWithIME(); 激活输入法 bool detachWithIME(); 取消激活输入法
例如:
1 CCTextFieldTF text = CCTextFieldTTF::textFieldWithPlaceHodler("Input Your name...", "Arial", 20); 2 text->setPosition(ccp(winSize.width/2, winSize.height/2 + 40)); 3 this->addChild(text); 4 text->attachWithIME();
在创建场景时,如果场景里面有文本框,那么会默认弹出键盘,如果想不自动弹出文本框,而是等用户轻触文本框再弹出键盘,实现方法如下:
//在文本框上增加一个按钮即可
1 CCMenuItem* tapItem = CCMenuItemFont::create(" ", this, menu_selector(StartScene::textFiledPressed)); 2 tapItem->setPosition(cp(winSize.width/2, winSize.height/2 + 40)); 3 menu->addChild(tapItem, 1); 4 //并且将显示输入法放到响应函数中 5 void StartScene::textFieldPressed(cocos2d::CCObject *sender) 6 { 7 text->attachWithIME(); 8 }
CCTextFieldTTF预留了一个代理CCTextFeildDelegate协议来通知相关事件,这个代理协议实际上是输入法代理协议的简化封装。
//即将激活输入法,如果不想激活,应该返回true
virtual bool onTextFeildAttachWithIME(CCTextFieldTTF *sender);
//即将取消输入法,如果不想取消,应该返回true
virtual bool onTextFieldDetachWithIME(CCTextFieldTTF *sender);
//即将插入一段文字,如果不想插入,应该返回true
virtual bool onTextFieldInsertText(CCTextFieldTTF *sender, const char * text, int nLen);
//即将删除一段文字,如果不想删除,应该返回true
virtual bool onTextFieldDeleteBackward(CCTextFieldTTF *sender, const char *delText, int nLen);
//如果不希望绘制这个输入法,返回true
virtual bool onDraw(CCTextFieldTTF *sender);
弹出键盘后,如果文本框在场景的下方,键盘可能会挡住文本框,所以进行以下处理:
1 bool StartScene::onTextFieldAttachWithIME(cocos2d::CCTextFieldTTF *sender) 2 { 3 this->setPosition(ccp(0, 100)); 4 return false; 5 } 6 bool StartScene::onTextFieldDetachWithIME(cocos2d::CCTextFieldTTF *sender) 7 { 8 this->setPosition(ccp(0, 0)); 9 return false; 10 } 11 //最后,设置文本框和协议响应方 12 text->setDelegate(this);
时间: 2025-01-06 19:17:11