指针问题,设置CCmenuitem为enable(false),还会触发其回调函数
2014-05-05 11:39
274 查看
最近最项目,遇到一个问题。解决方案很简单,但是却花费了我不少时间去排查,主要原因还是自己太菜。
在一个tableview中我自己写了一个cell,然后在cell中创建一个按钮。每次有数据变动都会重新画这个cell。
画这个cell的时候,我就会去重新创建一个CCMenuItemImage。
p_MenuItem1 = CCMenuItemImage::create("images/ui/ChooseMapScene/300006.png","images/ui/ChooseMapScene/300006.png","images/ui/ChooseMapScene/300007.png",
this,menu_selector(ChooseMapCell::BtnClickBoxSmall));
结果就是,我设置enable(false)完成过后,虽然表面上这个按钮显示的是不能点击的状态,但是点击过后还是会触发,按钮的回调函数。
通过将CCMenuItem的指针地址打印出来,发现点击的不是我设置的这个CCMenuItemImage。
而是前一个已经创建,但是没有回收,也没有设置为null的指针。
所以加上下面一句,就能解决这个问题。
if (p_MenuItem1 != NULL)
{
p_MenuItem1->removeFromParentAndCleanup(true);
p_MenuItem1 = NULL;
}
cocos2dx中用指针很多,需要注意
在一个tableview中我自己写了一个cell,然后在cell中创建一个按钮。每次有数据变动都会重新画这个cell。
画这个cell的时候,我就会去重新创建一个CCMenuItemImage。
p_MenuItem1 = CCMenuItemImage::create("images/ui/ChooseMapScene/300006.png","images/ui/ChooseMapScene/300006.png","images/ui/ChooseMapScene/300007.png",
this,menu_selector(ChooseMapCell::BtnClickBoxSmall));
结果就是,我设置enable(false)完成过后,虽然表面上这个按钮显示的是不能点击的状态,但是点击过后还是会触发,按钮的回调函数。
通过将CCMenuItem的指针地址打印出来,发现点击的不是我设置的这个CCMenuItemImage。
而是前一个已经创建,但是没有回收,也没有设置为null的指针。
所以加上下面一句,就能解决这个问题。
if (p_MenuItem1 != NULL)
{
p_MenuItem1->removeFromParentAndCleanup(true);
p_MenuItem1 = NULL;
}
cocos2dx中用指针很多,需要注意
相关文章推荐
- listView 触发长点击事件之后,还会执行点击事件的问题,
- android Listview中设置enable状态,显示点击的item
- FineUi导出时禁用ajax即EnableAjax="false"出现问题的解决方法
- GridView动态设置Item的宽高 第一个Item不显示的问题
- a标签伪协议触发事件和onclick触发事件的this指针问题
- 解决easuyi的linkbutton在按钮失效时,还会触发jquery的click事件的问题。
- javascript 达到设置textbox的"enable=false"状态一样的功能
- iOS小问题---设置TabBarItem的字体大小、颜色,各种状态下的图片
- android 关于listview item设置高度的问题解决方法
- 动态设置view的宽高空指针问题
- a标签伪协议触发事件和onclick触发事件的this指针问题
- ExtJs buttons的disabled属性,设置为false点击无法触发handler方法
- 一个回调函数不能操作Qt主线程设置Gui的问题
- listitem设置selected(true)失败问题
- GridView动态设置Item的宽高 第一个Item不显示的问题
- Android ListView的item背景色设置以及item点击无响应等相关问题
- unity 脚本的enabled属性设置成false的问题
- Android中Scrollview嵌套recyclerView,recyclerview设置wrapcontent无法显示以及显示后item显示不全的问题
- 树莓派(Debian)系统设置了静态IP之后还会获取动态IP的问题解决(scope global secondary eth0)
- 一个容易误解的小问题:TextBox的EnableViewState为false后,为什么点击按钮PostBack,TextBox的内容还是会保持(Persist)?