在电晕sdk的Tableview
我试图在Corona中设置一个表格视图,显示用户在文本字段对象中输入文本后创建的行。 到目前为止,输入的文本应显示在创建的新行内部。
我正在关注一个教程来做到这一点,并没有一步一步解释如何做到这一点,桌面视图远远超出了我的编程能力,所以我要么丢失一些非常明显的东西,要么造成结构性错误......基本上我不是能够将输入的文本传递给要显示的行。 这里是所讨论的片段:
local savename = native.newTextField( 0, 0, display.contentWidth - 50, 24 )
      sceneGroup:insert (savename)
      savename.x = centerX
      savename.y = display.screenOriginY + 140   
      savename.inputType = "default"
      savename:setTextColor( 0, 0, 0 )
      savename.align = "center"
local function scrollListener (event)
end
local function makeRow (event, txt)
  local row = event.target;
  row.t = display.newText(txt,0,0,"Helvetica",18)
  row.t.anchorX = 0
  row.t.y = row.height * 0.5
end
local function handleRowTouch (event)
end
local tableView = widget.newTableView( {
    top = display.contentHeight/2 + 90,
    width = display.contentWidth,
    height = 240,
    listener = scrollListener,
    onRowRender = makeRow,
    onRowTouch = onRowTouch
} )
sceneGroup:insert (tableView)
      local savename = native.newTextField( 0, 0, display.contentWidth - 50, 24 )
      sceneGroup:insert (savename)
      savename.x = centerX
      savename.y = display.screenOriginY + 140   
      savename.inputType = "default"
      savename:setTextColor( 0, 0, 0 )
      savename.align = "center"
      function savename:userInput (event)
        local length = string.len( self.text )
        if (event.phase == "began") then
          print ("Began" .. event.target.text)
          elseif (event.phase == "editing") then
                      print ("editing" .. event.target.text)
            elseif (event.phase == "ended") then
                      print ("ended" .. event.target.text)
            elseif (event.phase == "submitted") then
                    if (length > 0)  then
                      local rowHeight = 38
                      local rowColor = {default = { 1, 1, 1}}
                      local lineColor = {0, 0, 0}
                      local txt = self.text      
                      tableView:insertRow({
                        onEvent = handleRowTouch,
                        onRender = function (event) makeRow (event, txt) end,
                        height = rowHeight,
                        rowColor = rowColor,
                        lineColor = lineColor                      
                        })
                      self.text = ""
                      setKeyboardFocus (nil)
                    else
                      local alert = native.showAlert("Hey!", "Type in a save name please...n Or dismiss this action by touching the background.", {"Ok"})
                    end
        end
      end  
      savename:addEventListener ("userInput", savename)
然后它处于'savename:userInput'函数的“提交”阶段,我调用tableView:insertRow方法,onRender调用传递'event'和'txt'作为参数的'makeRow'函数。
'txt'应该对应于由'local txt = self.text'指定的用户输入的文本,但是当我运行该程序时,返回一个错误,在创建行文本时会返回'期望的字符串'(row.t )在makeRow函数中。
这似乎是因为我没有正确传递该参数,但我无法弄清楚我犯的错误。 你们有什么想法,为什么?
谢谢!!!
我无法弄清楚可能会发生什么,但是我想要做的是在函数savename中间打印self.text以查看其中的内容......
我认为这可能解决你的问题是用event.target.text替换self.text ...
希望能帮助到你!
链接地址: http://www.djcxy.com/p/25897.html