Tableview 觸摸層級的問題

在專案中使用tableview發現一點問題,詳細使用造成的過程我就不多說了~直接用最原始的代碼 寫一個bug demo,代碼有點長,是lua寫的,貼進去一定可以執行
執行 環境是 cocos2dx 2.2版
點擊畫面上的open 按鈕 會打開一個layer,上面有一個tableview跟ccctorlbutton,在ccctorlbutton上點擊或托曳時會發現tableview也會跟著動…這應該是有問題的
但若把 --open(layer) 的注解拿掉,讓程式一開始就執行open的話,會發現 這時候點擊或托曳ccctorlbutton時 tableview不會跟著動了! 很神奇…
希望有人能幫幫我 :stuck_out_tongue:


TableViewTestLayer={}
function TableViewTestLayer.scrollViewDidScroll(view)
  print("scrollViewDidScroll")
end

function TableViewTestLayer.scrollViewDidZoom(view)
  print("scrollViewDidZoom")
end

function TableViewTestLayer.tableCellTouched(table,cell)
  print("cell touched at index: " .. cell:getIdx())
end

function TableViewTestLayer.cellSizeForTable(table,idx)
  return 60,60
end

function TableViewTestLayer.tableCellAtIndex(table, idx)
  local strValue = string.format("%d",idx)
  local cell = table:dequeueCell()
  local label = nil
  if nil == cell then
    cell = CCTableViewCell:new()
    local sprite = CCSprite:create("Images/Icon.png")
    sprite:setAnchorPoint(CCPointMake(0,0))
    sprite:setPosition(CCPointMake(0, 0))
    cell:addChild(sprite)

    label = CCLabelTTF:create(strValue, "Helvetica", 20.0)
    label:setPosition(CCPointMake(0,0))
    label:setAnchorPoint(CCPointMake(0,0))
    label:setTag(123)
    cell:addChild(label)
  else
    label = tolua.cast(cell:getChildByTag(123),"CCLabelTTF")
    if nil ~= label then
      label:setString(strValue)
    end
  end

  return cell
end

function TableViewTestLayer.numberOfCellsInTableView(table)
  return 25
end
local function HvsStandardButtonWithTitle(pStrTitle)
  -- Creates and return a button with a default background and title color.
  local pBackgroundButton = CCScale9Sprite:create("extensions/button.png")
  local pBackgroundHighlightedButton = CCScale9Sprite:create("extensions/buttonHighlighted.png")

  pTitleButton = CCLabelTTF:create(pStrTitle, "Marker Felt", 30)

  pTitleButton:setColor(ccc3(159, 168, 176))

  local pButton = CCControlButton:create(pTitleButton, pBackgroundButton)
  pButton:setBackgroundSpriteForState(pBackgroundHighlightedButton, CCControlStateHighlighted)
  pButton:setTitleColorForState(ccc3(255,255,255), CCControlStateHighlighted)

  return pButton
end
local function open(layer)
  local winSize = CCDirector:sharedDirector():getWinSize()

  local tableView = CCTableView:create(CCSizeMake(600,60))
  tableView:setDirection(kCCScrollViewDirectionHorizontal)
  tableView:setPosition(CCPointMake(20, winSize.height / 2 - 150))


  local ui = CCLayerColor:create(ccc4(0xff,0xff,0x0,0xff))
  ui:setContentSize(CCSize(500,500))
  ui:setPosition(ccp(100,200))


  ui:addChild(tableView)
  layer:addChild(ui)
  --registerScriptHandler functions must be before the reloadData function
  tableView:registerScriptHandler(TableViewTestLayer.scrollViewDidScroll,CCTableView.kTableViewScroll)
  tableView:registerScriptHandler(TableViewTestLayer.scrollViewDidZoom,CCTableView.kTableViewZoom)
  tableView:registerScriptHandler(TableViewTestLayer.tableCellTouched,CCTableView.kTableCellTouched)
  tableView:registerScriptHandler(TableViewTestLayer.cellSizeForTable,CCTableView.kTableCellSizeForIndex)
  tableView:registerScriptHandler(TableViewTestLayer.tableCellAtIndex,CCTableView.kTableCellSizeAtIndex)
  tableView:registerScriptHandler(TableViewTestLayer.numberOfCellsInTableView,CCTableView.kNumberOfCellsInTableView)
  tableView:reloadData()


  local pButton = HvsStandardButtonWithTitle("123456")
  pButton:setPosition(ccp (200, 170))
  ui:addChild(pButton)
end
local function main()
  local scene=CCScene:create()
  CCDirector:sharedDirector():runWithScene(scene)

  local layer = CCLayerColor:create(ccc4(0xff,0x0,0x0,0xff))
  local winSize = CCDirector:sharedDirector():getWinSize()
  layer:setContentSize(CCSize(winSize.width,winSize.height))
  scene:addChild(layer)
  local pButton = HvsStandardButtonWithTitle("open")
  pButton:setPosition(ccp (300, 200))
  layer:addChild(pButton)
  local function touchUpInsideAction()
    open(layer)
  end
  pButton:addHandleOfControlEvent(touchUpInsideAction,CCControlEventTouchUpInside)
  --open(layer)
end
function __G__TRACKBACK__(errorMessage)
  print("----------------------------------------")
  print("LUA ERROR: " .. tostring(errorMessage) .. "\n")
  print(debug.traceback("", 2))
  print("----------------------------------------")
end
xpcall(main, __G__TRACKBACK__)

open(layer) 是什么……代码太长看到我眼花了