我这里设置优化的文本域组件,然后添加一个layer来覆盖它,来看看实际效果
添加imageview图片背景
auto image = ImageView::create("platformlogin_write.png");
image->setPosition(Vec2(100, 200));
image->setAnchorPoint(Vec2(0, 0));
image->setTouchEnabled(true);
image->setTag(10);
image->addTouchEventListener(this, toucheventselector(HelloWorld::onTouchExhcangeTextBg));
addChild(image,0);
//触摸函数实现使文本域获得焦点
void HelloWorld::onTouchExhcangeTextBg(Ref *target, TouchEventType type)
{
if (type != TouchEventType::TOUCH_EVENT_ENDED) return;
txtUser->attachWithIME();
}
添加文本域
txtUser = TextField::create();
txtUser->setFontSize(25);
txtUser->setPlaceHolder("11 ");
txtUser->setAnchorPoint(Vec2(0, 0));
txtUser->setMaxLength(11);
txtUser->setMaxLengthEnabled(true);
txtUser->setPosition(Vec2(100, 200));
this->addChild(txtUser, 0);
添加layer层级
auto layer = LayerColor::create();
layer->setContentSize(visibleSize);
layer->setPosition(Vec2::ZERO);
layer->setColor(ccColor3B::GREEN);
layer->setOpacity(120);
addChild(layer,30);
添加监听事件
auto lis = EventListenerTouchOneByOne::create();
lis->setSwallowTouches(true);
lis->onTouchBegan = [](Touch*t, Event*e)
{
return true;
};
//Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(lis, this);//这个函数我试了下,不能使用this,要使用对应的层layer也可以实现效果
Director::getInstance()->getEventDispatcher()->addEventListenerWithFixedPriority(lis, -1);//此处必须是小于0的一个数字
setSwallowTouches这个函数就是用来控制触摸吞噬的,设置false为不吞噬,设置true就可以保证上层的对象获取完触摸事件后不往下传递
设置true文本域无法触发触摸事件
设置false文本域可以获得触摸事件