CCEditBox 使用问题
2013-08-06 09:11
99 查看
使用CCEDitBox需要实现接口CCEditBoxDelegate
virtualvoid editBoxEditingDidBegin(CCEditBox* editBox) {}; //开始编辑
virtualvoid editBoxTextChanged(CCEditBox* editBox,conststd::string&
text) {}; //进行便捷内容修改
virtualvoid editBoxEditingDidEnd(CCEditBox* editBox) {}; //结束编辑
virtualvoid editBoxReturn(CCEditBox* editBox) =0; //返回
触发CCEditBox控件 几个虚函数调用顺序:
进行内容修改,之后点键盘确定键
开始编辑 ____________________________________>结束编辑----------------》返回
|
|
|不进行内容修改 直接点屏幕没有键盘的位置
------------------------------------------------------------》结束编辑--------------》返回
CCEditBox触发的时候,触摸事件不能传递给它所在的层。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
iOS 控件UItextField、
接口UITextFieldDelegate
要实现的函数
- (void)textFieldDidBeginEditing:(UITextField *)textField; //开始编辑
- (void)textFieldDidEndEditing:(UITextField *)textField; //编辑结束
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString
*)string; //进行编辑
文字修改
- (BOOL)textFieldShouldReturn:(UITextField *)textField; //返回
触发顺序:
进行修改 之后点键盘返回键
开始编辑__________________________________>返回 --------------》编辑结束
|
|
| 不进行修改 直接点屏幕
|-----------------------------------------------------》编辑结束
UITextField触发的时候,触屏事件能传递给它所在的CCLayer (点击UITextField弹出键盘时和键盘开启状态下点屏幕)',触发ccLayer的触屏函数
[textFieldbecomeFirstResponder]; //开启键盘
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
[textFieldresignFirstResponder]; //关闭键盘
returnYES;
}
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
//返回一个BOOL值,指定是否循序文本字段开始编辑
return YES;
}
- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
//当用户使用自动更正功能,把输入的文字修改为推荐的文字时,就会调用这个方法。
//这对于想要加入撤销选项的应用程序特别有用
//可以跟踪字段内所做的最后一次修改,也可以对所有编辑做日志记录,用作审计用途。
//要防止文字被改变可以返回NO
//这个方法的参数中有一个NSRange对象,指明了被改变文字的位置,建议修改的文本也在其中
return YES;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CCEditBox在iOS模拟器和android手机上的使用问题
CCEDitBox在android和iOS上分别调用各自的平台控件实现。CCEditBox只能用于单行文本输入。
android上面使用没问题。
在iOS上存在这个问题:
CCEditBox在全屏坐标下没问题。他作为某个不是全屏控件的子控件时,作为是这种:
CCtrollButton坐标正确,编辑框的坐标在(0,0)。原因是编辑框使用全屏坐标,CCEditBox使用相对坐标,即相对于父节点的坐标。
(
关于封装CCEditBox之后使用的问题:
封装CCEditBox,实现一个新的TextField,让原本的CCeditBox作为TextField的子节点存在。
坐标问题:
使用TextField,在cocos2dx上面设置TextField坐标后,发现TextField坐标正确,作为子节点的CCEditBox在屏幕上的坐标是(0,0),但是 CCEditBox的背景CCScaleSprite的坐标正确。
交叉编译到android,CCEditBox的输入框和它的背景sprite坐标都正确。
TextField所在层的触控优先级问题:
cocos2dx上,对TextField所在层设置单点触控,优先级设置为0,没有问题。
在android上,对TextField所在层设置单点触控,优先级为0,点击输入框,没有响应。
解决方法:单点触控时设置层的优先级大于0(CCEditBox默认优先级为0),或者设置多点触控。
CCEDitBox所在的层设置隐藏,exitBox仍可以相应的问题
CCEditBox设置隐藏无效,他所在的层隐藏时候,editbox还能相应,可以将它坐标设置在屏幕外面,或者删除。
)
查看CCEditBox的坐标设置:
void CCEditBox::setPosition(const CCPoint& pos)
{
CCControlButton::setPosition(pos);
if (m_pEditBoxImpl != NULL)
{
m_pEditBoxImpl->setPosition(pos);
}
}
修改编辑框的坐标,把相对坐标换成全屏坐标
voidCCEditBox::setPosition(constCCPoint& pos)
{
CCControlButton::setPosition(pos);
if (m_pEditBoxImpl !=NULL)
{
CCPoint worldPos = pos;
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
if(this->getParent()!=NULL &&this->getParent()->getParent()!=NULL)
{
worldPos =this->getParent()->convertToWorldSpace(pos);
}
#endif
m_pEditBoxImpl->setPosition(worldPos);
CCLog(" 输入框世界坐标pos(%f,%f)",worldPos.x,worldPos.y);
}
}
这样,CCEditBox作为不是全屏控件的子节点时,编辑框和controllButton坐标重合。
virtualvoid editBoxEditingDidBegin(CCEditBox* editBox) {}; //开始编辑
virtualvoid editBoxTextChanged(CCEditBox* editBox,conststd::string&
text) {}; //进行便捷内容修改
virtualvoid editBoxEditingDidEnd(CCEditBox* editBox) {}; //结束编辑
virtualvoid editBoxReturn(CCEditBox* editBox) =0; //返回
触发CCEditBox控件 几个虚函数调用顺序:
进行内容修改,之后点键盘确定键
开始编辑 ____________________________________>结束编辑----------------》返回
|
|
|不进行内容修改 直接点屏幕没有键盘的位置
------------------------------------------------------------》结束编辑--------------》返回
CCEditBox触发的时候,触摸事件不能传递给它所在的层。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
iOS 控件UItextField、
接口UITextFieldDelegate
要实现的函数
- (void)textFieldDidBeginEditing:(UITextField *)textField; //开始编辑
- (void)textFieldDidEndEditing:(UITextField *)textField; //编辑结束
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString
*)string; //进行编辑
文字修改
- (BOOL)textFieldShouldReturn:(UITextField *)textField; //返回
触发顺序:
进行修改 之后点键盘返回键
开始编辑__________________________________>返回 --------------》编辑结束
|
|
| 不进行修改 直接点屏幕
|-----------------------------------------------------》编辑结束
UITextField触发的时候,触屏事件能传递给它所在的CCLayer (点击UITextField弹出键盘时和键盘开启状态下点屏幕)',触发ccLayer的触屏函数
[textFieldbecomeFirstResponder]; //开启键盘
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
[textFieldresignFirstResponder]; //关闭键盘
returnYES;
}
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
//返回一个BOOL值,指定是否循序文本字段开始编辑
return YES;
}
- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
//当用户使用自动更正功能,把输入的文字修改为推荐的文字时,就会调用这个方法。
//这对于想要加入撤销选项的应用程序特别有用
//可以跟踪字段内所做的最后一次修改,也可以对所有编辑做日志记录,用作审计用途。
//要防止文字被改变可以返回NO
//这个方法的参数中有一个NSRange对象,指明了被改变文字的位置,建议修改的文本也在其中
return YES;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CCEditBox在iOS模拟器和android手机上的使用问题
CCEDitBox在android和iOS上分别调用各自的平台控件实现。CCEditBox只能用于单行文本输入。
android上面使用没问题。
在iOS上存在这个问题:
CCEditBox在全屏坐标下没问题。他作为某个不是全屏控件的子控件时,作为是这种:
CCtrollButton坐标正确,编辑框的坐标在(0,0)。原因是编辑框使用全屏坐标,CCEditBox使用相对坐标,即相对于父节点的坐标。
(
关于封装CCEditBox之后使用的问题:
封装CCEditBox,实现一个新的TextField,让原本的CCeditBox作为TextField的子节点存在。
坐标问题:
使用TextField,在cocos2dx上面设置TextField坐标后,发现TextField坐标正确,作为子节点的CCEditBox在屏幕上的坐标是(0,0),但是 CCEditBox的背景CCScaleSprite的坐标正确。
交叉编译到android,CCEditBox的输入框和它的背景sprite坐标都正确。
TextField所在层的触控优先级问题:
cocos2dx上,对TextField所在层设置单点触控,优先级设置为0,没有问题。
在android上,对TextField所在层设置单点触控,优先级为0,点击输入框,没有响应。
解决方法:单点触控时设置层的优先级大于0(CCEditBox默认优先级为0),或者设置多点触控。
CCEDitBox所在的层设置隐藏,exitBox仍可以相应的问题
CCEditBox设置隐藏无效,他所在的层隐藏时候,editbox还能相应,可以将它坐标设置在屏幕外面,或者删除。
)
查看CCEditBox的坐标设置:
void CCEditBox::setPosition(const CCPoint& pos)
{
CCControlButton::setPosition(pos);
if (m_pEditBoxImpl != NULL)
{
m_pEditBoxImpl->setPosition(pos);
}
}
修改编辑框的坐标,把相对坐标换成全屏坐标
voidCCEditBox::setPosition(constCCPoint& pos)
{
CCControlButton::setPosition(pos);
if (m_pEditBoxImpl !=NULL)
{
CCPoint worldPos = pos;
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
if(this->getParent()!=NULL &&this->getParent()->getParent()!=NULL)
{
worldPos =this->getParent()->convertToWorldSpace(pos);
}
#endif
m_pEditBoxImpl->setPosition(worldPos);
CCLog(" 输入框世界坐标pos(%f,%f)",worldPos.x,worldPos.y);
}
}
这样,CCEditBox作为不是全屏控件的子节点时,编辑框和controllButton坐标重合。
相关文章推荐
- 第一次使用Genymotion遇到的问题:for an unknown reson,VirtualBox DHCP has not assigned an IP address to virtual
- 使用EasyUI 的上传文件控件 easyui-filebox 获取其数据的问题
- ubuntu12.04+virtualbox+winxp的关于摄像头无法使用,声音出不来的问题
- cocos2d-x CCEditBox使用陷阱
- 在动态插入Easyui datebox控件时,使用$.parser.parse()手工渲染时,解决日期控件原有的值被清除问题
- laravel homestead vagrant box安装使用,问题,及相关命令
- CentOS7 中使用 QQ—VirtualBox + WinXP + QQ—摄像头的问题
- ubuntu virtualbox XP 使用adb受限问题
- MFC中使用SetWindowPos GroupBox遮盖内部控件问题解决办法
- 解决使用Genymotion出现Unable to start the virtual device.VirtualBox cannot start the virtual device.问题
- laravel homestead vagrant box安装使用,问题,及相关命令
- jquery easyui datebox 的使用需要注意的问题
- 使用css3属性时table的box-shadown被覆盖问题
- 问题分享:最近测试VDI-in-a-Box使用AD做身份验证出现以下错误提示:
- cocos2d-x CCEditBox使用陷阱
- 第一次使用Genymotion遇到的问题:for an unknown reson,VirtualBox DHCP has not assigned an IP address to virtual
- css3中的box-shadow(阴影)使用说明和兼容性问题
- cocos2d-x如何解决 CCEditBox在 安卓平台下面不响应touch的问题
- cocos2d-x CCEditBox使用陷阱
- 在UWP中使用RichEditBox只读时图片显示问题(最后有关于RichEditBox颜色问题的解决方案)