Hi,
I’m trying to set up a table view that displays rows which are created once the user inputs a text in a textfield object. So far the text inputed should be shown inside of the new row created.
I am following a tutorial to do this which doesn’t explain step by step how to do this stuff and tableviews are well above my programming capabilities so I’m either missing something very obvious or making a structural mistake… Basically I am not able to pass the text inputed to the row to be displayed. Here,s the snippet in question:
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)
Then it’s in the “submitted” phase of the ‘savename:userInput’ function that I’m calling the tableView:insertRow method which onRender calls the ‘makeRow’ function passing ‘event’ and ‘txt’ as params.
‘txt’ should correspond to the text input by the user as specified by ‘local txt = self.text’, but when I run the program an error is returned saying ‘a string is expected’ when creating the row text (row.t) in the makeRow function.
This seems as I’m not passing that parameter correctly but I can’t figure out where I’m making a mistake. Do you guys have any idea why???
Thanks!!!