TextField 在cocos2d-x中怎么cocos 弹出框软键盘

暂没有新消息哦~
&Cocos2d-x之TextFieldTTF
Cocos2d-x之TextFieldTTF
开通极客学院VIP会员,免费观看全部会员课程
最低 21.6 元 / 月
VIP会员尊享特权
观看全部会员课程
720P高清视频下载
已有会员账号,请
视频太卡?试试切换线路
本课时针对课程内容进行简要讲解。
只有成为VIP会员才能提问&回复,快吧!如果你还没有账号你可以一个账号。
添加新技术问题
课程 [Cocos2d-x之TextFieldTTF]
中已存在问题
添加新技术问题
问题描述越详细,被解答的速度越快
有新回答时请邮件提醒我
着急,拜托快点
不急,慢慢解决
关联课程 [Cocos2d-x之TextFieldTTF]
服务热线:400-678-8266这个文章的名字起的实在是有点长,主要是怕说不清楚。
在IOS上,输入时,我看到过的比较少,就两种,如附件两张图。一个是虚拟键盘的输入框完全是在CCEditBox上,另一张虚拟键盘的输入区域是紧挨着键盘的并且左对齐的。
我的cocos2d版本是2.1rc0-x-2.1.4,貌似是当前最新的。
因为项目需要,我使用了CCEditBox,实现一个聊天的功能。ipad上运行时发现,键盘自带的输入区域既不在CCEditBox上,也没有紧挨着键盘左对齐。
这就是需要我们调整虚拟键盘输入域的位置了。查看了CCEditBoxImplIOS.mm文件,发现方法adjustTextFieldPosition是调整这个文本域的位置的。看逻辑没什么错,为什么不是我需要的效果呢。
现在网上查,很多人说这是CCEditBox的bug,必须要把CCEditBox对象加到大小是全屏的父节点中。。。我晕,怎么可能,界面层级关系有要求,节点很多,父节点不可能是全屏的节点。&还有人说设置position的时候取父节点的position。还有人说必须要把CCEditBox先加到父节点中去,然后设置其position。这些我都尝试了。发现,啥都没用。
然后仔细研究了adjustTextFieldPosition方法,代码如下。
1 void CCEditBoxImplIOS::adjustTextFieldPosition()
CCSize contentSize = m_pEditBox-&getContentSize();
CCRect rect = CCRectMake(0, 0, contentSize.width, contentSize.height);
rect = CCRectApplyAffineTransform(rect, m_pEditBox-&nodeToWorldTransform());
CCPoint designCoord = ccp(rect.origin.x, rect.origin.y + rect.size.height);
[m_systemControl setPosition:convertDesignCoordToScreenCoord(designCoord, m_bInRetinaMode)];
其中第5行的nodeToWorldTransform方法代码是这样的,很明显,都已经向上取了所有父节点来把当前节点的坐标进行转换的。
1 CCAffineTransform CCNode::nodeToWorldTransform()
CCAffineTransform t = this-&nodeToParentTransform();
for (CCNode *p = m_pP p != NULL; p = p-&getParent())
t = CCAffineTransformConcat(t, p-&nodeToParentTransform());
所以问题就在调用adjustTextFieldPosition方法的时机了。发现只在setPosition 和 onEnter 两个方法里边调用。这样当你还没有加入父节点时,nodeToWorldTransform方法的for循环其实起不了多大作用,就是没法将你当前CCEditBox的坐标转换为全屏这样的坐标了。
所以我得解决方法是,在打开键盘时,也就是openKeyboard方法中调用adjustTextFieldPosition,结果完全OK了。
1 void CCEditBoxImplIOS::openKeyboard()
m_pLabel-&setVisible(false);
m_pLabelPlaceHolder-&setVisible(false);
m_systemControl.textField.hidden = NO;
adjustTextFieldPosition();// add by elan
[m_systemControl openKeyboard];
阅读(...) 评论()2646人阅读
cocos2dx(36)
今天白白跟大家分享一下cocos2d-x中如何获得虚拟键盘并获取用户输入的方法。
有的时候我们需要用户输入一些信息,比如用户登录,这个时候就需要得到虚拟键盘,并获取输入信息,在此我们使用CCTextField获取用户输入。
CCTextFieldTTF是CCLabelTTF的子类,他是一个动态的CCLabelTTF。
我们去写一个例子,看看如何使用CCTextFieldTTF。
1、首先我们新建一个Text项目,helloscene类继承CCLayer以及CCTextFieldDelegate。
在头文件还需要声明一些函数,我们看代码:
class HelloWorld : public cocos2d::CCLayer, cocos2d::CCTextFieldDelegate
//多类继承
virtual bool init();
//重写CCTextFieldDelegate的回调函数当用户启动虚拟键盘的时候回调函数
// 要有输出口
virtual bool onTextFieldAttachWithIME(CCTextFieldTTF * sender);
//当用户关闭虚拟键盘的时候回调函数
virtual bool onTextFieldDetachWithIME(CCTextFieldTTF * sender);
//当用户进行输入,虚拟键盘的时候回调函数
virtual bool onTextFieldInsertText(CCTextFieldTTF * sender, const char * text, int nLen);
//当用户进行删除文字,虚拟键盘的时候回调函数
virtual bool onTextFieldDeleteBackward(CCTextFieldTTF * sender, const char * delText, int nLen);
static cocos2d::CCScene* scene();
void menuCloseCallback(CCObject* pSender);
CREATE_FUNC(HelloWorld);
2、我们去源文件实现他们:
这里源文件原有的init函数与scene函数我没有动,只是改变了按钮的回调函数menuCloseCallback:
void HelloWorld::menuCloseCallback(CCObject* pSender)
CCTextFieldTTF * text=CCTextFieldTTF::textFieldWithPlaceHolder(&plase input&,&Arial&,24);//输入框
text-&setPosition(ccp(100, 100));
addChild(text);
text-&setDelegate(this);//绑定接口
text-&attachWithIME();//开启虚拟键盘
//text-&detachWithIME(); 这里记得注释掉,不然开启后又被关了
//关闭虚拟键盘
bool HelloWorld::onTextFieldAttachWithIME(CCTextFieldTTF * sender)
//false是启用键盘
当用户关闭虚拟键盘的时候回调函数
bool HelloWorld :: onTextFieldDetachWithIME(CCTextFieldTTF * sender)
//关闭键盘
当用户进行输入 虚拟键盘的时候回调函数
bool HelloWorld ::onTextFieldInsertText(CCTextFieldTTF * sender, const char * text, int nLen)
// 输入字符
当用户进行删除文字 虚拟键盘的时候回调函数
bool HelloWorld :: onTextFieldDeleteBackward(CCTextFieldTTF * sender, const char * delText, int nLen)
//删除字符
ok,可以运行了,等等,我的虚拟键盘呢?windows没有虚拟键盘,把项目编译到android或者ios才能看到虚拟键盘哦。
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:157938次
积分:2124
积分:2124
排名:第16507名
原创:58篇
评论:67条
文章:16篇
阅读:91008
(2)(1)(1)(1)(1)(2)(1)(3)(1)(1)(6)(2)(1)(2)(11)(1)(4)(1)(15)(9)}

我要回帖

更多关于 cocos creator 弹出框 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信