Cocos2dx-lua TableView的使用

2020-09-12  本文已影响0人  游戏创作者

废话不多说直接上代码

local MessageLayer = class("MessageLayer", cc.load("mvc").ViewBase)
local MessageItem = require("app.views.Hall.Friends.MessageItem")

function MessageLayer:onCreate()
    
end

function MessageLayer:initUI(  )
    self.root = cc.CSLoader:createNode("Hall/Friends/MessageLayer.csb")
    self:addChild(self.root)


    local childConfig = {
        ["panel"] = {name = "panel"},
        -- ["panel.rankBtn"] = {name = "rankBtn", click = "rankBtnClick_"},
        -- ["panel.moneyBg.moneyText"] = {name = "moneyText"},
        -- ["panel.diamondBg.diamondText"] = {name = "diamondText"},
        -- ["panel.diamondBg.diamondAddBtn"] = {name = "rankBtn", click = "diamondAddBtnClick_"},
    }

    cp.getUtils("GameGlobal").setCSNodeBinding(self,self.root,childConfig)

    local sz = self.panel:getContentSize()
    self._tableView = cc.TableView:create(cc.size(display.width, sz.height))
    self._tableView:setDirection(cc.SCROLLVIEW_DIRECTION_VERTICAL)    
    self._tableView:setVerticalFillOrder(cc.TABLEVIEW_FILL_TOPDOWN)
    self._tableView:setDelegate()
    self.panel:addChild(self._tableView)

    self._tableView:registerScriptHandler(handler(self,self.tableCellTouched), cc.TABLECELL_TOUCHED)
    self._tableView:registerScriptHandler(handler(self,self.cellSizeForTable), cc.TABLECELL_SIZE_FOR_INDEX)
    self._tableView:registerScriptHandler(handler(self,self.tableCellAtIndex), cc.TABLECELL_SIZE_AT_INDEX)
    self._tableView:registerScriptHandler(handler(self,self.numberOfCellsInTableView), cc.NUMBER_OF_CELLS_IN_TABLEVIEW)
end

function MessageLayer:initData( )
    self._data = {{1},{1},{1},{1},{1},{1},{1},{1},{1},{1},{1},{1}}
    self._tableView:reloadData() 
end

function MessageLayer:tableCellTouched( tableView,cell )
    local idx = cell:getIdx() + 1
    print("+++++++++++++++点击:"..idx)
end

function MessageLayer:numberOfCellsInTableView(tableView)
    return #self._data
end

function MessageLayer:cellSizeForTable(tableView)
    return display.width, 154
end

function MyFriendLayer:tableCellAtIndex(view, idx)   
    local itemData = self._data[idx+1] or {} 
    local cell = view:dequeueCell()
    local item = nil
    if not cell then
        cell = cc.TableViewCell:new()
        item = MessageItem.new()
        item:addTo(cell)
        item:setName("MessageItem")
    else
        item = cell:getChildByName("MessageItem")
    end
    item:updateData(itemData)
        
    return cell
end

return MessageLayer

需要注意的地方:

  1. cell 一定是 cc.TableViewCell;
  2. 我用的是Cocos2dx 4.0 tableView没有裁剪,解决方案是把它加在Panel上,用Panel裁剪;
  3. idx 是从0开始的;
  4. 注意cell数据的刷新,复用。

CCTableView继承CCScrollView,CCScrollView继承Layer
UIListView继承UIScrollView,UIScrollView继承Layout

上一篇 下一篇

猜你喜欢

热点阅读