Cocos2d-x中提供了文本框控件CCTextFIEldTTF实现文字输入功能。
CCTextFIEldTTF预留了代理CCTextFIEldDelegate处理通知事件。
一、CCTextFIEldTTF 类部分代码如下:
class CC_DLL CCTextFIEldTTF : public cclabelTTF,public CCIMEDelegate{public: /** creates a CCTextFIEldTTF from a Fontname,alignment,dimension and Font size */ static CCTextFIEldTTF * textFIElDWithPlaceHolder(const char *placeholder,const CCSize& dimensions,CCTextAlignment alignment,const char *Fontname,float FontSize); /** creates a cclabelTTF from a Fontname and Font size */ static CCTextFIEldTTF * textFIElDWithPlaceHolder(const char *placeholder,float FontSize); /** initializes the CCTextFIEldTTF with a Font name,dimension and Font size */ bool initWithPlaceHolder(const char *placeholder,float FontSize); /** initializes the CCTextFIEldTTF with a Font name and Font size */ bool initWithPlaceHolder(const char *placeholder,float FontSize); /** Open keyboard and receive input text. */ virtual bool attachWithIME(); /** End text input and close keyboard.*/ virtual bool detachWithIME(); // input text propertypublic: virtual voID setString(const char *text); virtual const char* getString(voID); // place holder text property // place holder text displayed when there is no text in the text fIEld.public: virtual voID setPlaceHolder(const char * text); virtual const char * getPlaceHolder(voID);public: virtual voID setSecureTextEntry(bool value); virtual bool isSecureTextEntry();};
const char* getString(voID):获取文本框内容。
voID setString(const char *text):设置文本框内容。
bool attachWithIME():激活输入法。
bool detachWithIME():取消激活输入法。
setPlaceHolder(const char * text):设置文本框内提示文字。
const char * getPlaceHolder(voID):获取文本框内提示文字。
bool isSecureTextEntry():判断是否是安全输入。
实例:仅使用CCTextFIEldTTF实现文字输入。
CCTextFIEldTTF * text = CCTextFIEldTTF::textFIElDWithPlaceHolder("Please input","Arial",20); text->setposition(ccp(200,200)); text->setPlaceHolder("Enter Your name"); text->setString("Gong"); text->attachWithIME(); addChild(text); cclog("%s",text->getPlaceHolder()); cclog("%s",text->getString());
二、CCTextFIEldDelegate
CCTextFIEldDelegate中部分代码如下:
class CC_DLL CCTextFIEldDelegate{public: /** If the sender doesn't want to attach to the IME,return true;*/ virtual bool onTextFIEldAttachWithIME(CCTextFIEldTTF * sender) { CC_UNUSED_ParaM(sender); return false; } /**If the sender doesn't want to detach from the IME,return true;*/ virtual bool onTextFIEldDetachWithIME(CCTextFIEldTTF * sender) { CC_UNUSED_ParaM(sender); return false; } /**If the sender doesn't want to insert the text,return true;*/ virtual bool onTextFIEldInsertText(CCTextFIEldTTF * sender,const char * text,int nLen) { CC_UNUSED_ParaM(sender); CC_UNUSED_ParaM(text); CC_UNUSED_ParaM(nLen); return false; } /**If the sender doesn't want to delete the delText,return true;*/ virtual bool onTextFIEldDeleteBackward(CCTextFIEldTTF * sender,const char * delText,int nLen) { CC_UNUSED_ParaM(sender); CC_UNUSED_ParaM(delText); CC_UNUSED_ParaM(nLen); return false; } /**If the sender doesn't want to draw,return true.*/ virtual bool onDraw(CCTextFIEldTTF * sender) { CC_UNUSED_ParaM(sender); return false; }};
bool onTextFIEldAttachWithIME(CCTextFIEldTTF * sender):即将激活输入法,如果不想激活,返回true。
bool onTextFIEldDetachWithIME(CCTextFIEldTTF * sender):即将取消输入法,如果不想取消,返回true。
bool onTextFIEldInsertText(CCTextFIEldTTF * sender,int nLen):即将插入一段文字,如果不想插入,返回true。
bool onTextFIEldDeleteBackward(CCTextFIEldTTF * sender,int nLen):即将删除一段文字,如果不想删除,返回true。
bool onDraw(CCTextFIEldTTF * sender):如果不希望绘制这个输入法,返回true。
实例:使用CCTextFIEldDelegate实现通知相关事件
继承CCTextFIEldDelegate类后需要覆写以上五个函数,按需要覆写。
首先,继承CCTextFIEldDelegate:
class HelloWorld : public cocos2d::cclayer,public cocos2d::CCTextFIEldDelegate{public: static cocos2d::CCScene* scene(); virtual bool init(); CREATE_FUNC(HelloWorld); bool onTextFIEldAttachWithIME(CCTextFIEldTTF * sender); bool onTextFIEldDetachWithIME(CCTextFIEldTTF * sender); bool onTextFIEldInsertText(CCTextFIEldTTF * sender,int nLen); bool onTextFIEldDeleteBackward(CCTextFIEldTTF * sender,int nLen); bool onDraw(CCTextFIEldTTF * sender);};
然后,按需要覆写上面五个函数,使用之:
bool HelloWorld::init(){ cclayer::init(); CCTextFIEldTTF * text = CCTextFIEldTTF::textFIElDWithPlaceHolder("Please input",200)); text->setDelegate(this);//绑定接口 text->attachWithIME(); addChild(text); return true;}bool HelloWorld::onTextFIEldAttachWithIME(CCTextFIEldTTF * sender){ return false;}bool HelloWorld::onTextFIEldDetachWithIME(CCTextFIEldTTF * sender){ //将屏幕上移,避免虚拟键盘遮挡输入框 this->setposition(0,100); return false;}bool HelloWorld::onTextFIEldInsertText(CCTextFIEldTTF * sender,int nLen){ //将屏幕移动会原处 this->setposition(ccp(0,0)); return false;}bool HelloWorld::onTextFIEldDeleteBackward(CCTextFIEldTTF * sender,int nLen){ return false;}bool HelloWorld::onDraw(CCTextFIEldTTF * sender){ return false;}使用CCTextFIEldDelegate后,在创建好输入框后,需要把输入框通过setDelegate绑定接口,之后便可以使用。 总结
以上是内存溢出为你收集整理的我的Cocos2d-x学习笔记(二十二)CCTextFieldTTF (文字输入)、CCTextFieldDelegate(输入通知事件)全部内容,希望文章能够帮你解决我的Cocos2d-x学习笔记(二十二)CCTextFieldTTF (文字输入)、CCTextFieldDelegate(输入通知事件)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)