单击提交后如何隐藏native.newTextField?

时间:2014-03-29 03:59:51

标签: lua corona

我试图让用户的名字在垂直方向上一次丢失一个字母。示例:Adam" A"会在1秒后出现," d"在显示的A下3秒后出现," a"在显示的d下5秒后出现," m"在显示的a下7秒后出现。视觉效果会有一种多米诺骨牌效应。当它们出现时,它们会一直显示在屏幕上。

如果我注释掉userNameField:removeSelf(),那么代码工作正常。我得到了我想要的效果,但问题是我仍然显示了userNamefield。

如果您需要查看更多代码,请与我们联系。

local greeting = display.newText( "Greetings, enter your name",0,0,native.systemFont, 20 )
greeting.x = display.contentWidth/2
greeting.y = 100

local submitButton = display.newImage( "submit.png"  ,display.contentWidth/2, display.contentHeight - 50 )

local userNameField = native.newTextField( display.contentWidth * 0.5 , 150, 250, 45)
userNameField.inputtype = "defualt"


local incrementor = 0
function showNameLetters()

userNameField:removeSelf( )
if incrementor <= string.len ("userNameField.text") then
    incrementor = incrementor + 1
    personLetters = string.sub (userNameField.text, incrementor,incrementor)
    display_personLetters = display.newText (personLetters, 290,30*incrementor, native.systemFont, 30)
        display_personLetters.alpha = 0
    transition.to(display_personLetters,{time = 3000, alpha = 1, onComplete = showNameLetters})
end
end

更新

通过在我的函数中添加userNameField.isVisible = false,我找到了解决问题的方法。

我也发现了一些非常奇怪的东西,并希望有人解释为什么会这样。如果我添加问候语:removeSelf()和submitButton:removeSelf()(我已经在下面的代码中对它们进行了评论,以显示我将它们放在哪里进行测试)。我得到了奇怪的结果,只有第一个字母淡入。如果我设置greeting.isVisible = false和submitButton.isVisible = false。代码工作正常。

我很困惑为什么对象:removeSelf()不会工作。有人可以帮我解决这个问题。

也就是说,如果我替换以下行:

userNameField:removeSelf( )

使用:

userNameField.isVisible = false

然后该应用程序工作正常。请建议我为什么/任何问题的解决方案。提前谢谢......

2 个答案:

答案 0 :(得分:1)

您似乎多次调用 showNameLetters ,这意味着您要多次删除本机文本字段。没有它,并在删除它之前检查nil:

if userNameField ~= nil then
 userNameField:removeSelf()
 userNameField = nil
end

答案 1 :(得分:0)

它显示您在删除后使用userNameField中的数据(在下面的行中):

personLetters = string.sub (userNameField.text, incrementor,incrementor)

除了你一次又一次地呼叫object:removeSelf()而不检查它的存在(如hades2510所述)。因此,在删除userNameField之前,请检查它是否存在:

if userNameField ~= nil then
 userNameField:removeSelf()
 userNameField = nil
end

当userNameField为nil时,你不会获得userNameField.text。因此,使用临时变量来保存先前的userNameField.text,并在需要时从该变量中获取保存的数据。

额外注意事项:您确定,您必须检查以下行中的文字"userNameField.text"或变量userNameField.text的长度吗?如果你必须使用文本字段中的数据,那么这也很重要。

if incrementor <= string.len ("userNameField.text") then
  ........
end

保持编码.......................:)