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