一个 scrollView 上面添加了一个 button 子节点,按钮添加监听 ---- button:addTouchEventListener(callback);
在点击回调里面想要删除scrollView ---- scrollView:removeFromParent(),程序直接崩溃也没有报错,尝试过使用menuItem可以实现,
不知道为什么Button 会出错, 求教大神
呵呵,这个问题我也改过,是事件分发那里的代码有问题:
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,延迟一帧去删,如果没问题,那就是这个原因了。
延迟一帧确实可以实现,谢谢! 
但是这样代码感觉好丑
remove会release你的节点
你可以retain 后立马autorelease
嗯,成功了!O(∩_∩)O谢谢!
版主的回答完美!