TableView模态弹窗,并屏蔽下层的按钮响应
来源:互联网 发布:淘宝店铺如何编辑宝贝 编辑:程序博客网 时间:2024/05/16 04:21
上一讲我们说了用tableview做一个帮助界面,考虑到很多的帮助界面都是弹出式的,因此今天又加上这篇文章,来完善之前的帮助。
cocos2dx的触摸事件比较麻烦,当前的版本还没有如windowsMFC那样的方便,现在要做比较麻烦,据说3.0版本会建立消息机制,期待ing...
现在就讲在2.X版本下的处理,要屏蔽掉下层,可以将tableview层设计成有最高响应权限的层,这个可以通过
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, -128, true);
-128这个常量定义是指响应的最高优先级,也就是按钮的响应优先级,想要屏蔽掉下层的按钮必须是这个值
最后一个参数代表本层需要吞噬触摸,即一旦这个优先级的触摸被响应,那么其他优先级低的就不能再响应了
这个需要在ccToucnBegan里面返回true;
这个来处理,不过需要注意的是,必须在init()里面打开触摸事件,不然registerWithTouchDispatcher不会被调用
setTouchEnabled(true);
好了,上代码
class TableViewTestLayer : public cocos2d::CCLayer, public cocos2d::extension::CCTableViewDataSource, public cocos2d::extension::CCTableViewDelegate{public: virtual bool init(); // 初始化,在里面放个tableview virtual void registerWithTouchDispatcher(void); // 重载它来进行优先级的控制 //以下三个函数必须重载,让tableview来处理这些事件,否则它不会工作 virtual bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent); virtual void ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent); virtual void ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);// 响应按钮事件void toExtensionsMainLayer(CCObject *sender) {removeFromParent();}CCTableView* tableView;}这个层就是我们的有tableview的层bool TableViewTestLayer::ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){tableView->ccTouchBegan(pTouch, pEvent);return true; // 返回true 屏蔽掉其他优先级低的控件}void TableViewTestLayer::ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){tableView->ccTouchMoved(pTouch, pEvent);CCLOG("------bouch moved--------");}void TableViewTestLayer::ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){CCLOG("------bouch end--------");tableView->ccTouchEnded(pTouch, pEvent);}// 一定要通过重载此函数来实现优先级的控制。在onenter onexit里面处理的时候会带来额外的工作量//会导致本层的按钮也被屏蔽,而通过此函数注册的不会,用此函数最官方,若一定要从onEnter onExit里面注册,那么菜单也得加到// ccTouchBegan, ccTouchMoved,ccTouchEnded中,并且判断按钮是不是按下,非常麻烦void TableViewTestLayer::registerWithTouchDispatcher(){CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, -128, true);}bool TableViewTestLayer::init(){ if ( !CCLayer::init() ) { return false; }CCSize winSize = CCDirector::sharedDirector()->getWinSize();_width = 480;_height = 200;tableView = CCTableView::create(this, CCSizeMake(480, 200));tableView->setDirection(kCCScrollViewDirectionVertical);//tableView->setPosition(ccp(winSize.width-150,winSize.height/2-120));tableView->setPosition(ccp(0 ,80));tableView->setDelegate(this);tableView->setVerticalFillOrder(kCCTableViewFillTopDown);this->addChild(tableView);tableView->reloadData();// Back MenuCCMenuItemFont *itemBack = CCMenuItemFont::create("Back", this, menu_selector(TableViewTestLayer::toExtensionsMainLayer));itemBack->setPosition(ccp(100, 25));CCMenu* menuBack = CCMenu::create(itemBack, NULL);menuBack->setPosition(CCPointZero);addChild(menuBack);setTouchEnabled(true); return true;}
最后,需要在关闭时将自己从当前运行的父对象中清除就OK了!
- TableView模态弹窗,并屏蔽下层的按钮响应
- 事件响应的优先级、stopProgapation禁止下层组件响应
- cocos2d-x 游戏暂停和恢复,还可以屏蔽下层按钮触发
- android FrameLayout响应了下层view的点击事件
- android FrameLayout响应了下层view的点击事件
- 屏蔽Button按钮对Enter回车键的响应 及实现Enter->Tab效果
- Flex加载flash_as3_swf,并响应其中的按钮事件
- tableview怎么屏蔽statusbar的高度
- tableview怎么屏蔽statusbar的高度
- cocos2d-x中用CCLayer实现对话框的简单做法,自动屏蔽下层Touch事件
- tableView上的按钮功能
- Cocos2d-xv3.x屏蔽下层触摸
- Cocos2d-x 3.0屏蔽下层触摸
- 响应按钮的事件
- 响应按钮的事件
- 如何动态创建按钮,并响应消息
- vc动态生成按钮并响应
- win32程序创建按钮并响应点击
- 编程的命名方法
- unity3d破解难度分析介绍
- C#上传视频生成缩略图
- Linked List Cycle II
- 二、校园招聘面试过程-经验
- TableView模态弹窗,并屏蔽下层的按钮响应
- Android 环境搭建
- 生活,需要我们去努力
- Open Daylight Controller 简易入门
- ubuntu package query
- 3byte特定格式小数转换成double
- 有趣的中文编程语言
- opencv2.3.1与VS2008/VS2010安装配置图解
- 在linux下makefile的使用