Corona SDK在故事板中使用本机文本字段

时间:2014-01-25 10:49:27

标签: sdk textbox lua storyboard corona

所以,我有一个使用电晕故事板的程序。 有一个场景1,用户可以在文本框中键入内容,还有另一个场景,场景2,我有一些文本。问题是,当用户使用文本框离开场景时,文本框仍会出现在屏幕上。我已经尝试使用删除它的removeSelf()。但问题是,如果我使用removeSelf(),文本框将永远消失,即使用户返回场景1,它仍然消失了! 我怎么能解决这个问题?这是场景1的代码:


--
-- view1.lua
--
-----------------------------------------------------------------------------------------

local storyboard = require( "storyboard" )
local scene = storyboard.newScene()

function scene:createScene( event )
    local group = self.view

    local bg = display.newRect( 0, 0, display.contentWidth, display.contentHeight )
    bg:setFillColor(0,255,0 )   -- green

    local title = display.newText( "Second View", 0, 0, native.systemFont, 32 )
    title:setTextColor( 0 ) -- black
    title:setReferencePoint( display.CenterReferencePoint )
    title.x = display.contentWidth * 0.5
    title.y = 125

    local summary = display.newText( "Loaded by the first tab 'onPress' listener\n— specified in the 'tabButtons' table.", 0, 0, 300, 300, native.systemFont, 14 )
    summary:setTextColor( 0 ) -- black
    summary:setReferencePoint( display.CenterReferencePoint )
    summary.x = display.contentWidth * 0.5 + 10
    summary.y = title.y + 215


    local function textListener( event )

    if ( event.phase == "began" ) then

        -- user begins editing text field
        print( event.text )

    elseif ( event.phase == "ended" ) then

        -- text field loses focus

    elseif ( event.phase == "ended" or event.phase == "submitted" ) then

        -- do something with defaulField's text

    elseif ( event.phase == "editing" ) then

        print( event.newCharacters )
        print( event.oldText )
        print( event.startPosition )
        print( event.text )

    end
end

-- Create our Text Field
defaultField = native.newTextField( 150, 150, 180, 30 )
defaultField:addEventListener( "userInput", textListener )
    -- all objects must be added to group (e.g. self.view)
    group:insert( bg )
    group:insert( title )
    group:insert( summary )
end

-- Called immediately after scene has moved onscreen:
function scene:enterScene( event )
    local group = self.view

    -- do nothing

end

-- Called when scene is about to move offscreen:
function scene:exitScene( event )
    local group = self.view

    -- INSERT code here (e.g. stop timers, remove listenets, unload sounds, etc.)

end

-- If scene's view is removed, scene:destroyScene() will be called just prior to:
function scene:destroyScene( event )
    local group = self.view

    -- INSERT code here (e.g. remove listeners, remove widgets, save state variables, etc.)

end

-----------------------------------------------------------------------------------------
-- END OF YOUR IMPLEMENTATION
-----------------------------------------------------------------------------------------

-- "createScene" event is dispatched if scene's view does not exist
scene:addEventListener( "createScene", scene )

-- "enterScene" event is dispatched whenever scene transition has finished
scene:addEventListener( "enterScene", scene )

-- "exitScene" event is dispatched whenever before next scene's transition begins
scene:addEventListener( "exitScene", scene )

-- "destroyScene" event is dispatched before view is unloaded, which can be
-- automatically unloaded in low memory situations, or explicitly via a call to
-- storyboard.purgeScene() or storyboard.removeScene().
scene:addEventListener( "destroyScene", scene )

-----------------------------------------------------------------------------------------

return scene

2 个答案:

答案 0 :(得分:0)

那么也许你可以用alpha来隐藏组中的所有元素?

group.alpha=0

答案 1 :(得分:0)

您需要在场景中添加文本框:enterScene方法并在场景中删除它:exitScene。

Corona在创建场景时只调用一次createScene,但是当场景移入或移出堆栈时,它会调用enterScene和exitScene。这些是创建/删除元素的地方。

有关电晕屏幕管理的更多信息,请阅读this。它主要关注的是清理场景中使用的资源,示例是关于声音的,但它适用于您正在尝试的内容,并解释了Corona中的场景管理。