点击选择所有行。

以下是我用于在表格行中显示勾选标记的代码,在每个行的点击事件中,勾选标记会显示,再次点击后会隐藏。我添加了一个按钮来选择将所有勾选标记显示出来(全选),但它无法正常工作。

local function onRowRender( event )
    local phase = event.phase
    local row = event.row
    chktick = display.newImage('images/kitchen/checktick.png', 10, 10);
    if (deviceName == "iPhone" or deviceName == "iPad") then
        chktick.x = 303;
        chktick.isVisible = false;
    else
        chktick.x = 303;
        chktick.isVisible = false;
    end
    chktick.y = row.contentHeight * 0.5;
    row:insert(chktick);
    row:addEventListener("tap", onRowTouch);
    return true;
end

在行触摸事件中:

local function onRowTouch( event )
    local row = event.target;
    local _chktick = event.target[6];
    print("Comes here when touch"..row.index);
    if (flagvalue==1)then
        _chktick.isVisible = true;
        flagvalue=0;
    else
        _chktick.isVisible = false;
        flagvalue=1;
    end
    return true;
end

全选事件:

local function SelecetAllEventListener( event )
    flagvalue=1;
    currentScene.reloadScene();
    return true;
end

调用 Rowrender 的代码:

function scene:enterScene( event )
    MenuID = event.params.currentMenuID;
    local group = self.view
    tableView = widget.newTableView
    {
        top = 85,
        left = 0,
        width = 320,
        height = 380,
        maskFile = "billmask.png",
        hideBackground = true,
        onRowRender = onRowRender,
        listener = tableViewListener,
    }
    group:insert( tableView )
end

请帮我解决如何使用 SelecetAllEventListener 让所有勾选标记可见的问题。

点赞
用户869951
用户869951

问题可能在于你的“select all”处理程序(SelecetAllEventListener)中设置了一个标志为1,然后重新加载场景。如果我理解正确,这将导致onRowRender再次被调用,但它不会再次导致onRowTouch被调用(因为没有触摸行)。你需要做的是在SelecetAllEventListener中循环遍历所有行,并更改复选框的可见性。你的代码没有显示你保存行的位置,但我会假设在一个变量中:

local tableRows = {}
local toggle = true

local function somewhereInYourCode()
    ...
    newRow = ...
    yourTable:inserRow(newRow) -- 会调用onRowRender
    table.insert(tableRows, newRow)
    ...
end

local function SelecetAllEventListener( event )
    for i,row in ipairs(tableRows) do
        row[6].isVisible = toggle
    end
    toggle = not toggle -- 下一次
    return true
end

你的代码没有显示插入行的位置,所以我把它放在了somewhereInYourCode()中,但你明白了。

2014-03-04 15:42:18