cocos2d-x如何弹出键盘

2015年01月14日 10:17 0 点赞 0 评论 更新于 2025-11-21 14:19

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

程序实例:使用TextFieldTTF类创建文本并弹出软键盘

1. 创建头文件

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

#ifndef __TextFieldTTF_H__
#define __TextFieldTTF_H__

#include "cocos2d.h"
USING_NS_CC;

class TextFieldTTF : public CCLayer
{
public:
bool init();
static CCScene* scene();
// 用于处理触摸事件
bool ccTouchBegan(CCTouch*, CCEvent*);
// 用于在程序中创建一个文本控件
CCTextFieldTTF* textEdit;
CREATE_FUNC(TextFieldTTF);
};

#endif // __HELLOWORLD_SCENE_H__

2. 实现源文件

TextFieldTTF.cpp中添加以下代码:

#include "TextFieldTTF.h"

CCScene* TextFieldTTF::scene()
{
CCScene* scene = CCScene::create();
TextFieldTTF* layer = TextFieldTTF::create();
scene->addChild(layer);
return scene;
}

bool TextFieldTTF::init()
{
// 初始化父类层
CCLayer::init();
// 得到窗口的尺寸
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
// 创建文本框
// 第一个参数:文本框中显示的内容
// 第二个参数:字体
// 第三个参数:文本的大小
textEdit = CCTextFieldTTF::textFieldWithPlaceHolder("Please input your name:", "Arial", 36);
// 设置文本框的位置
textEdit->setPosition(ccp(winSize.width / 2, winSize.height / 2));
// 添加文本框到层上
addChild(textEdit);
// 当触摸到控件的时候弹出软键盘
setTouchMode(kCCTouchesOneByOne);
setTouchEnabled(true);
return true;
}

bool TextFieldTTF::ccTouchBegan(CCTouch* touch, CCEvent* ev)
{
// 用于判断是否点中了控件
bool isClicked = textEdit->boundingBox().containsPoint(touch->getLocation());
// 如果点中了控件
if (isClicked)
{
// 弹出软键盘
textEdit->attachWithIME();
}
// 表示接受触摸消息
return true;
}

3. 程序执行结果

  • Windows系统:在Windows下单击“Please input your name: ”没有反应,因为Windows系统没有软键盘。
  • Android系统
  • 触摸“Please input your name :”后会弹出软键盘。
  • 使用软键盘输入一段文字,选择完成后文字会显示在控件上。

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

TextFieldTTF.cpp文件中的代码改成如下代码:

#include "TextFieldTTF.h"

CCScene* TextFieldTTF::scene()
{
CCScene* scene = CCScene::create();
TextFieldTTF* layer = TextFieldTTF::create();
scene->addChild(layer);
return scene;
}

bool TextFieldTTF::init()
{
// 初始化父类层
CCLayer::init();
// 得到窗口的尺寸
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
// 创建文本框
textEdit = CCTextFieldTTF::textFieldWithPlaceHolder("Please input your name:", "Arial", 36);
// 设置文本框的位置
textEdit->setPosition(ccp(winSize.width / 2, winSize.height / 2));
// 添加文本框到层上
addChild(textEdit);
// 输入密码
textEdit->setSecureTextEntry(true);
// 注册触摸函数,实现当触摸到控件的时候,弹出软键盘
setTouchMode(kCCTouchesOneByOne);
setTouchEnabled(true);
return true;
}

bool TextFieldTTF::ccTouchBegan(CCTouch* touch, CCEvent* ev)
{
// 用于判断是否点中了控件
bool isClicked = textEdit->boundingBox().containsPoint(touch->getLocation());
// 如果点中了控件
if (isClicked)
{
// 弹出软键盘
textEdit->attachWithIME();
}
// 表示接受触摸消息
return true;
}

4. 移植到Android系统的执行结果

  • 触摸“Please input your name :”后弹出软键盘。
  • 使用软键盘输入一段文字,选择完成后文字显示在控件上。