本文就主要介绍下cocos2d-x如何弹出键盘,使用CCTextFieldTTF类CCTextFieldTTF是一个显示文本控件的类用于输入文本和现实文本类似于Windows编程中的Static控件和Edit控件。

程序实例:使用TextFieldTTF类创建一个文本,触摸文本弹出软键盘,并且可以通过软键盘向TextFieldTTF中输入文字

首先创建一个TextFieldTTF.h的头文件,在头文件中添加下面的代码

  1. #ifndef __TextFieldTTF_H__
  2. #define __TextFieldTTF_H__
  3.  
  4. #include "cocos2d.h"
  5. USING_NS_CC;
  6.  
  7. class TextFieldTTF : public CCLayer
  8. {
  9. public:
  10.      bool init();  
  11.  
  12.     static CCScene* scene();
  13.  
  14.     //用于处理触摸事件
  15.     bool ccTouchBegan(CCTouch*, CCEvent*);
  16.  
  17.     //用于在程序中创建一个文本控件
  18.     CCTextFieldTTF* textEdit;
  19.  
  20.     CREATE_FUNC(TextFieldTTF);
  21. };
  22.  
  23. #endif // __HELLOWORLD_SCENE_H__
然后在TextFieldTTF.cpp中添加下面的代码

  1. #include "TextFieldTTF.h"
  2.  
  3. CCScene* TextFieldTTF::scene()
  4. {
  5.     CCScene* scene = CCScene::create();
  6.      
  7.     TextFieldTTF* layer = TextFieldTTF::create();
  8.  
  9.     scene->addChild(layer);
  10.  
  11.     return scene;
  12. }
  13.  
  14.  
  15. bool TextFieldTTF::init()
  16. {
  17.     //初始化父类层
  18.     CCLayer::init();
  19.  
  20.     //得到窗口的尺寸
  21.     CCSize winSize = CCDirector::sharedDirector()->getWinSize();
  22.  
  23.     //创建文本框
  24.     //第一个参数:文本框中显示的内容
  25.     //第二个参数:字体
  26.     //第三个参数:文本的大小
  27.     textEdit = CCTextFieldTTF::textFieldWithPlaceHolder("Please input your name:",
  28.              "Arial", 36);
  29.  
  30.     //设置文本框的位置
  31.     textEdit->setPosition(ccp(winSize.width / 2, winSize.height / 2));
  32.  
  33.     //添加文本框到层上
  34.     addChild(textEdit);
  35.  
  36.     //当触摸到控件的时候弹出软键盘
  37.     setTouchMode(kCCTouchesOneByOne);
  38.     setTouchEnabled(true);
  39.  
  40.     return true;
  41. }
  42.  
  43. bool TextFieldTTF::ccTouchBegan(CCTouch* touch, CCEvent* ev)
  44. {
  45.     //用于判断是否点中了控件
  46.     bool isClicked = textEdit->boundingBox().containsPoint(touch->getLocation());
  47.  
  48.     //如果点中了控件
  49.     if(isClicked)
  50.     {
  51.         //弹出软键盘
  52.         textEdit->attachWithIME();
  53.     }
  54.  
  55.     //表示接受触摸消息
  56.     return true;
  57. }
程序执行结果:

在Windows下单击“Please input your name: ”会没有反应,因为Windows下没有软键盘。

程序移值到Android下的执行结果:

触摸“Please input your name :”后弹出软键盘


使用软键盘输入一段文字后:


选择完成后文字显示在控件上


程序实例:TextFieldTTF实现输入密码

将TextFieldTTF.cpp文件中的代码改成下面的代码

  1. #include "TextFieldTTF.h"
  2.  
  3. CCScene* TextFieldTTF::scene()
  4. {
  5.     CCScene* scene = CCScene::create();
  6.      
  7.     TextFieldTTF* layer = TextFieldTTF::create();
  8.  
  9.     scene->addChild(layer);
  10.  
  11.     return scene;
  12. }
  13.  
  14.  
  15. bool TextFieldTTF::init()
  16. {
  17.     //初始化父类层
  18.     CCLayer::init();
  19.  
  20.     //得到窗口的尺寸
  21.     CCSize winSize = CCDirector::sharedDirector()->getWinSize();
  22.  
  23.     //创建文本框
  24.     textEdit = CCTextFieldTTF::textFieldWithPlaceHolder("Please input your name:",
  25.              "Arial", 36);
  26.  
  27.     //设置文本框的位置
  28.     textEdit->setPosition(ccp(winSize.width / 2, winSize.height / 2));
  29.  
  30.     //添加文本框到层上
  31.     addChild(textEdit);
  32.  
  33.     //输入密码
  34.     textEdit->setSecureTextEntry(true);
  35.  
  36.     //注册触摸函数,实现当触摸到控件的时候,弹出软键盘
  37.     setTouchMode(kCCTouchesOneByOne);
  38.     setTouchEnabled(true);
  39.  
  40.     return true;
  41.     
  42. }
  43.  
  44. bool TextFieldTTF::ccTouchBegan(CCTouch* touch, CCEvent* ev)
  45. {
  46.     //用于判断是否点中了控件
  47.     bool isClicked = textEdit->boundingBox().containsPoint(touch->getLocation());
  48.  
  49.     //如果点中了控件
  50.     if(isClicked)
  51.     {
  52.         //弹出软键盘
  53.         textEdit->attachWithIME();
  54.     }
  55.  
  56.     //表示接受触摸消息
  57.     return true;
  58. }
程序移值到Android下的执行结果:


触摸“Please input your name :”后弹出软键盘


使用软键盘输入一段文字


选择完成后文字显示在控件上