如何实现点击按钮删除按钮的父亲?

一个 scrollView 上面添加了一个 button 子节点,按钮添加监听 ---- button:addTouchEventListener(callback);
在点击回调里面想要删除scrollView ---- scrollView:removeFromParent(),程序直接崩溃也没有报错,尝试过使用menuItem可以实现,
不知道为什么Button 会出错, 求教大神:2:

呵呵,这个问题我也改过,是事件分发那里的代码有问题:
void TouchGroup::ccTouchEnded(CCTouch pTouch, CCEvent pEvent)
{
ccArray
selectedWidgetArray = m_pSelectedWidgets->data;
int length = selectedWidgetArray->num;
for (int i=0; i<length; ++i)
{
Widget
hitWidget = (Widget*)(selectedWidgetArray->arr);
hitWidget->onTouchEnded(pTouch, pEvent);
m_pSelectedWidgets->removeObject(hitWidget);
}
}

把最后两句像这像调换一下顺序即可。

你好!请问3.2版本应该怎么改呢?我没有找到TouchGroup。谢谢 :866:

贴你的代码来看看

来了!

--设置button状态,添加监听
function SystemSettings:setButton(name,father,state)
    local function callback(sender, eventType)
        self:touchEvent(sender, eventType)
    end

    local button = ccui.Helper:seekWidgetByName(father,name)          
    if state ~= nil then
        button:setHighlighted(state)
    end
    button:addTouchEventListener(callback)
end
   --黑名单
    self._panelBlacklist = widget:getChildByName("Panel_tk2")
    self._panelBlacklist:setVisible(false)
    local scrollView_bl = ccui.Helper:seekWidgetByName(self._widget,"ScrollView_yk2") --这就是父亲scrollView
    local panel_item = scrollView_bl:getChildByName("Panel_t1")
    scrollView_bl:removeAllChildren()
    scrollView_bl:setClippingEnabled(true)
    scrollView_bl:setBounceEnabled(true) 
    scrollView_bl:setInnerContainerSize(cc.size(scrollView_bl:getInnerContainerSize().width,(panel_item:getContentSize().height+10)*table.getn(blacklist)))
    for i,v in pairs(blacklist) do
        local item = panel_item:clone()
        local label = ccui.Helper:seekWidgetByName(item,"Label_126")
        label:setString(v)
        item:setPosition(cc.p(item:getPositionX(), item:getContentSize().height*(table.getn(blacklist)-i+0.5)))
        scrollView_bl:addChild(item)
        self:setButton("Button_129", item)   --这是子按钮

    end
function SystemSettings:touchEvent(sender,eventType)
    if eventType == ccui.TouchEventType.began then

        --从黑名单删除
      if sender:getName() == "Button_129" then
            local scrollView_bl = ccui.Helper:seekWidgetByName(self._widget,"ScrollView_yk2")
            local panel_item = scrollView_bl:getChildByName("Panel_t1")
            scrollView_bl:removeAllChildren()
            
        end
    elseif eventType == ccui.TouchEventType.moved then
    elseif eventType == ccui.TouchEventType.ended then
    end
end

实现的功能就是点击删除按钮,把按钮的父控件remove掉,包括按钮。

有个地方贴错了,第三段的第八行为 panel_item:removeFromParent()

类似的道理啊,先调响应函数,再从hit集合里删除当前对象。
或者你启个timer,延迟一帧去删,如果没问题,那就是这个原因了。

延迟一帧确实可以实现,谢谢! :2:

但是这样代码感觉好丑:6:

remove会release你的节点

你可以retain 后立马autorelease

嗯,成功了!O(∩_∩)O谢谢!:2:

版主的回答完美!