您的位置:首页 > 其它

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坐标重合。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐