最近最项目,遇到一个问题。解决方案很简单,但是却花费了我不少时间去排查,主要原因还是自己太菜。
在一个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中用指针很多,需要注意