2013-10-15 3 views
1

Я пытаюсь создать список элементов, используя виджет TableView в Corona. Я последовал их онлайн-примерам и создал TableView. Он появляется на экране и прокручивается, но ни одно событие не запускается, когда я нажимаю строку, даже если я установил прослушиватель для OnRowTouch.TableView не регистрирует событий Corona

local options_for_list_view = { 
    id = "list_view", 
    top = 0, 
    left = 0, 
    width = display.contentWidth, 
    height = display.contentHeight, 
    hideBackground = true, 
    hideScrollBar = true, 
    listener = on_table_touch, 
    onRowRender = onRowRender, 
    onRowTouch = on_row_touch, -- registering listener 
} 

list_view = widget.newTableView(options_for_list_view) 

for key, value in pairs(trophy_list) do 
    local params = 
    { 
    name = key 
    } 

    list_view:insertRow 
    { 
    isCategory = false, 
    rowHeight = total_height * 0.1, 
    rowColor = rowColor, 
    lineColor = { 0, 0, 0 }, 
    params = params 
    } 
end 

Вот слушатель:

local function on_row_touch(event) 
    print("error") 
end 

Кто-нибудь знает, что может быть проблема?

+1

Вы уверены, что 'on_row_touch (event)' определен перед добавлением его в 'options_for_list_view'? Кроме того, вы можете показать «tableViewListener», пожалуйста? ('on_table_touch (event)') – Kamiccolo

+0

Это было определено впоследствии. Я не думал, что это будет иметь значение, поскольку они были в одном файле. –

ответ

1

Вы должны определить свою функцию on_row_touch(event)ДО, добавив его в таблицу options_for_list_view.

Объекты в Lua созданы в том же порядке, как указано в источниках. Итак, в вашем случае, вы просто кладете nil в место слушателя событий onRowTouch. И только после этого создать локальную функцию, которая должна была быть прослушиватель событий :)

Некоторые правильный инструмент статического анализа должен помочь избавиться от такого рода ошибок ...

Успехов;)

Упрощенная версия:

print(foo()) 

function foo() 
    return "some_value..." 
end 

Выход:

lua: ./call_test.lua:1: attempt to call global 'foo' (a nil value)

Смежные вопросы