【问题标题】:Corona SDK Using nativ text field in storyboardCorona SDK 在情节提要中使用原生文本字段
【发布时间】:2014-01-25 10:49:26
【问题描述】:

所以,我有一个使用电晕故事板的程序。 在场景 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

【问题讨论】:

    标签: sdk textbox lua storyboard coronasdk


    【解决方案1】:

    所以也许您可以使用 alpha 隐藏组中的所有元素?

    group.alpha=0
    

    【讨论】:

    • 所以我尝试将 defaultField.alpha=0 放在场景中:destroy() 函数,它起作用了(即使文本框仍然是可点击的)并且它也不会回到 defaultField。当我从场景 2 转到场景 1 时,alpha=1。哎呀!
    • 所以你把 defaultField.alpha=0 放在 destroy() 和 defaultField.alpha=1 在 enterScene() ?
    • 是的,这就是我所做的,并且仍然保持 alpha=0。 (然而,alpha 似乎不是最优的,因为文本字段仍然是可点击的。)
    • 将 print("enter") 放在 scene:enterScene 中,并在进入场景后检查它是否在那里。如果没有,您必须找出事件未在 enterScene 上调度的原因
    • 有趣,我第一次去现场时它只打印“进入”!哇。将尝试修复它!谢谢你的帮助!编辑:也许是因为我把它放在 createScene 而不是 enterScene 中?认为它现在有效!
    【解决方案2】:

    需要在scene:enterScene方法上添加文本框,在scene:exitScene方法中移除。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      相关资源
      最近更新 更多