点击选择所有行

时间:2014-02-28 04:57:18

标签: lua corona corona-storyboard

这里我用来显示表格行中的刻度线的代码,在每一行上单击勾选标记显示,然后点击其隐藏。我添加了一个按钮来选择使所有刻度可见(全选),它不是工作

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

关于rowtouch方法

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,
    }
   end
  group:insert( tableView )
end

请帮助我如何使用 SelecetAllEventListener 显示所有可显示的内容?

1 个答案:

答案 0 :(得分:1)

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

local tableRows = {}
local toggle = true

local function somewhereInYourCode()
    ...
    newRow = ...
    yourTable:inserRow(newRow) -- will cause onRowRender to get called
    table.insert(tableRows, newRow)
    ...
end

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

您的代码未显示您插入行的位置,因此我将其放入somewhereInYourCode()但您明白了。