Hello Rob
I am calling the function onDatePicker to load a pickerWheel Calendar overlay on the click of DateField object.
[lua]
local function onDatePicker( event )
if event.phase == “ended” then
– Options table for the overlay scene “pause.lua”
local options = {
isModal = true,
effect = “fade”,
time = 100,
}
descrptField.isVisible = false
benifield.isVisible = false
currentObj = event.target
composer.showOverlay( “datePicker2”, options )
end
end
local date = os.date( “*t” )
local dateLabel = (date.day…"-"…date.month …"-"…date.year)
DateField = widget.newButton
{
width = _W,
height = 30,
defaultFile = “images/timeBg.png”,
overFile = “images/timeBg_hover.png”,
id = “ContryName”,
label = dateLabel,
labelAlign = “right”,
labelColor = { default={ 0.3,0.3,0.3 }, over={ 0.3, 0.3, 0.3, 0.5 } },
labelXOffset = -6,
labelYOffset = -2,
fontSize = 12,
font = constants.mainFont,
onEvent = onDatePicker,
}
DateField.x = 0
DateField.y = borderrect.y + borderrect.height + 5
DateField.anchorX = 0
sceneGroup:insert(DateField)
[/lua]
So when it moves in calendar scene there is datePicker2.lua.
[lua]
local composer = require( “composer” )
local scene = composer.newScene()
local widget = require( “widget” )
local constants = require(“constants”)
local date
local month
local year
function scene:create( event )
local sceneGroup = self.view
local date = os.date( “*t” )
local dateLabel = (date.day…"-"…date.month …"-"…date.year)
– Create two tables to hold data for days and years
local days = {}
local years = {}
– Populate the “days” table
for d = 1, 31 do
days[d] = d
end
– Populate the “years” table
for y = 1, 40 do
years[y] = 2000 + y
end
– Configure the picker wheel columns
local columnData =
{
– Months
{
align = “left”,
width = 120,
startIndex = 14,
labels = years
},
– Days
{
align = “left”,
width = 70,
startIndex = date.day,
labels = days
},
– Years
{
align = “center”,
width = 70,
startIndex = date.month,
labels = { “January”, “February”, “March”, “April”, “May”, “June”, “July”, “August”, “September”, “October”, “November”, “December” }
}
}
– Image sheet options and declaration
local options = {
frames =
{
{ x=12, y=20, width=335, height=220 },
– { x=110, y=0, width=110, height=218 },
--{ x=220, y=0, width=110, height=218 }
},
sheetContentWidth = 335,
sheetContentHeight = 270
}
local pickerWheelSheet = graphics.newImageSheet( “images/pickerWheel.png”, options )
– Create the widget
local pickerWheel = widget.newPickerWheel
{
top = display.contentHeight*0.5-110,
left = 2,
columns = columnData,
sheet = pickerWheelSheet,
overlayFrame = 1,
overlayFrameWidth = 335,
overlayFrameHeight = 220,
backgroundFrame = 2,
backgroundFrameWidth = 0,
backgroundFrameHeight = 0,
seperatorFrame = 3,
seperatorFrameWidth = 0,
seperatorFrameHeight = 0
}
sceneGroup:insert(pickerWheel)
– Get the table of current values for all columns
– This can be performed on a button tap, timer execution, or other event
local function onCloseTouch( … )
– body
local values = pickerWheel:getValues()
if values[3].value == “January” then
values[3].value = 01
elseif values[3].value == “February” then
values[3].value = 02
elseif values[3].value == “March” then
values[3].value = 03
elseif values[3].value == “April” then
values[3].value = 04
elseif values[3].value == “May” then
values[3].value = 05
elseif values[3].value == “June” then
values[3].value = 06
elseif values[3].value == “July” then
values[3].value = 07
elseif values[3].value == “August” then
values[3].value = 08
elseif values[3].value == “September” then
values[3].value = 9
elseif values[3].value == “October” then
values[3].value = 10
elseif values[3].value == “November” then
values[3].value = 11
elseif values[3].value == “December” then
values[3].value = 12
end
– Get the value for each column in the wheel (by column index)
date = values[2].value
month = values[3].value
year = values[1].value
print(hour,min,timeMode)
composer.hideOverlay( “fade”, 100 )
end
local closeBtn = display.newImageRect(“images/close.png”,40,40)
closeBtn.x = display.contentWidth*0.9
closeBtn.y = display.contentHeight*0.5-110
closeBtn:addEventListener(“tap”,onCloseTouch)
sceneGroup:insert(closeBtn)
end
function scene:show( event )
local sceneGroup = self.view
local phase = event.phase
if phase == “will” then
constants.prevScene = “nochange”
– Called when the scene is still off screen and is about to move on screen
elseif phase == “did” then
– Called when the scene is now on screen
–
– INSERT code here to make the scene come alive
– e.g. start timers, begin animation, play audio, etc.
end
end
function scene:hide( event )
local sceneGroup = self.view
local phase = event.phase
local parent = event.parent
if event.phase == “will” then
parent:fromCalendar(date,month,year)
elseif phase == “did” then
– Called when the scene is now off screen
end
end
function scene:destroy( event )
local sceneGroup = self.view
– Called prior to the removal of scene’s “view” (sceneGroup)
–
– INSERT code here to cleanup the scene
– e.g. remove display objects, remove touch listeners, save state, etc.
end
– Listener setup
scene:addEventListener( “create”, scene )
scene:addEventListener( “show”, scene )
scene:addEventListener( “hide”, scene )
scene:addEventListener( “destroy”, scene )
return scene
[/lua]
So in this scene after selecting any date when user click on close button it sends the date (date month, year) values to previous scene by calling parent method in hide scene. So i am getting this error for sometime which i did not rectifying.
This is the total stack Trace of error :
Dec 17 11:54:01.757: Runtime error
?:0: attempt to index field ‘_view’ (a nil value)
stack traceback:
?: in function <?:947>
?: in function <?:221>
Thank you