• cocos-lua3.17 Lua tableView工具类


    local MyTableView = class("MyTableView")
    MyTableView.__index = MyTableView
    
    MyTableView.property = {}
    
    --这里是为了让layer能调用TableViewTestLayer的方法
    function MyTableView.extend(target)
        local t = tolua.getpeer(target)
        if not t then
            t = {}
            tolua.setpeer(target, t)
        end
        setmetatable(t, MyTableView)
        return target
    end
    
    --滚动事件
    function MyTableView.scrollViewDidScroll(view)
        --print("滚动事件")
    end
    
    function MyTableView.scrollViewDidZoom(view)
        print("scrollViewDidZoom")
    end
    
    --cell点击事件
    function MyTableView.tableCellTouched(table,cell)
        print("点击了cell:" .. cell:getIdx())
    end
    
    --cell的大小,注册事件就能直接影响界面,不需要主动调用
    function MyTableView.cellSizeForTable(table,idx)
        if MyTableView.property.cellSizeW and MyTableView.property.cellSizeH then
            return MyTableView.property.cellSizeW,MyTableView.property.cellSizeH
        end
        return 150,150
    end
    
    --显示出可视部分的界面,出了裁剪区域的cell就会被复用
    function MyTableView.tableCellAtIndex(table, idx)
        local strValue = string.format("%d",idx)
        print("数据加载"..strValue)
        local cell = table:dequeueCell()
        local label = nil
        if nil == cell then
            print("创建了新的cell")
            cell = cc.TableViewCell:new()
    
            --添加cell内容
            -- local sprite = display.newSprite("res/apple.png")
            -- sprite:setAnchorPoint(cc.p(0,0))
            -- sprite:setPosition(cc.p(0, 0))
            -- cell:addChild(sprite)
    
            label = cc.Label:createWithSystemFont(strValue, "Helvetica", 40)
            label:setPosition(cc.p(0,0))
            label:setAnchorPoint(cc.p(0,0))
            label:setColor(cc.c3b(255,0,0))
            label:setTag(123)
            cell:addChild(label)
        else
            print("使用已经创建过的cell")
            label = cell:getChildByTag(123)
            if nil ~= label then
                label:setString(strValue)
            end
        end
    
        return cell
    end
    
    --设置cell个数,注册就能生效,不用主动调用
    function MyTableView.numberOfCellsInTableView(table)
        if MyTableView.property.cellNum then
            return MyTableView.property.cellNum
        end
        return 100
    end
    
    function MyTableView:init()
    
        local visiableSize = cc.Director:getInstance():getVisibleSize()
        local origin = cc.Director:getInstance():getVisibleOrigin()
    
        local winSize = cc.Director:getInstance():getWinSize()
    
        local isVERTICAL = MyTableView.property.isVERTICAL
    
        local tableSize = isVERTICAL==true and cc.size(winSize.width - 20,150) or cc.size(200, winSize.height - 20)
        if MyTableView.property.tableSize then
            tableSize = MyTableView.property.tableSize
        end
        if isVERTICAL then
            -----------------------------------------------------------
            --创建TableView
    
            local tableView = cc.TableView:create(tableSize)
            --设置滚动方向  水平滚动
            tableView:setDirection(cc.SCROLLVIEW_DIRECTION_HORIZONTAL)
            -- tableView:setPosition(cc.p(10, winSize.height / 2))
            tableView:setDelegate()
            self:addChild(tableView)
            --registerScriptHandler functions must be before the reloadData funtion
            --注册脚本编写器函数必须在reloadData函数之前(有道自动翻译)
    
            --cell个数
            tableView:registerScriptHandler(MyTableView.numberOfCellsInTableView,cc.NUMBER_OF_CELLS_IN_TABLEVIEW)
            --滚动事件
            tableView:registerScriptHandler(MyTableView.scrollViewDidScroll,cc.SCROLLVIEW_SCRIPT_SCROLL)
            tableView:registerScriptHandler(MyTableView.scrollViewDidZoom,cc.SCROLLVIEW_SCRIPT_ZOOM)
            --cell点击事件
            tableView:registerScriptHandler(MyTableView.tableCellTouched,cc.TABLECELL_TOUCHED)
            --cell尺寸、大小
            tableView:registerScriptHandler(MyTableView.cellSizeForTable,cc.TABLECELL_SIZE_FOR_INDEX)
            --显示出可视部分的cell
            tableView:registerScriptHandler(MyTableView.tableCellAtIndex,cc.TABLECELL_SIZE_AT_INDEX)
            --调用这个才会显示界面
            tableView:reloadData()
            -----------------------------------------------------------
    
        else
    
            -----------------------------------------------------------
            --跟上面差不多,这里是创建一个“垂直滚动”的TableView
            tableView = cc.TableView:create(tableSize)
            tableView:setDirection(cc.SCROLLVIEW_DIRECTION_VERTICAL)
            -- tableView:setPosition(cc.p(winSize.width / 2, 10))
            tableView:setDelegate()
            tableView:setVerticalFillOrder(cc.TABLEVIEW_FILL_TOPDOWN)
            self:addChild(tableView)
            --registerScriptHandler functions must be before the reloadData funtion
            --注册脚本编写器函数必须在reloadData函数之前(有道自动翻译)
    
            --cell个数
            tableView:registerScriptHandler(MyTableView.numberOfCellsInTableView,cc.NUMBER_OF_CELLS_IN_TABLEVIEW)
            --滚动事件
            tableView:registerScriptHandler(MyTableView.scrollViewDidScroll,cc.SCROLLVIEW_SCRIPT_SCROLL)
            tableView:registerScriptHandler(MyTableView.scrollViewDidZoom,cc.SCROLLVIEW_SCRIPT_ZOOM)
            --cell点击事件
            tableView:registerScriptHandler(MyTableView.tableCellTouched,cc.TABLECELL_TOUCHED)
            --cell尺寸、大小
            tableView:registerScriptHandler(MyTableView.cellSizeForTable,cc.TABLECELL_SIZE_FOR_INDEX)
            --显示出可视部分的cell
            tableView:registerScriptHandler(MyTableView.tableCellAtIndex,cc.TABLECELL_SIZE_AT_INDEX)
            --调用这个才会显示界面
            tableView:reloadData()
            -----------------------------------------------------------
    
        end
    
        return true
    end
    
    --这里是为了让layer能调用TableViewTestLayer的方法
    function MyTableView.create(tableSize,cellSizeW,cellSizeH,cellNum,isVERTICAL)
        MyTableView.property.cellSizeW = cellSizeW--Item宽度
        MyTableView.property.cellSizeH = cellSizeH--Item长度
        MyTableView.property.cellNum = cellNum--Item数量
        MyTableView.property.isVERTICAL = isVERTICAL--true 水平滑动 
        MyTableView.property.tableSize = tableSize--显示区域大小 cc.size()
    
        local layer = MyTableView.extend(cc.Layer:create())
        if nil ~= layer then
            layer:init()
        end
    
        return layer
    end
    
    return MyTableView
  • 相关阅读:
    GUI的最终选择Tkinter模块初级篇
    JavaScript的进阶篇
    html标签详解
    docker使用自定义镜像zabbix服务
    Django之url定义和ORM框架的使用
    zabbix实现企业微信监控报警
    centos6 搭建nginx实现负载均衡
    mysql数据库进阶篇
    Linux运维之Ansible自动化运维管理工具
    php菜刀分析学习
  • 原文地址:https://www.cnblogs.com/zhangthree/p/10507995.html
Copyright © 2020-2023  润新知