如何动态创建对象(来自本地库的文本字段),并向其添加事件

我在Corona中使用动态创建textField,但是我无法为这些对象添加事件,因为我需要将textField的信息存储在一个表中。我曾经在C#中使用一个事件,并要求获取textBox的焦点,但在这种情况下,我不知道该怎么做。textField的focus属性不存在(您可以设置焦点,但无法查询其状态)。

另一方面,我尝试创建带有函数的表,并将这些函数传递给textField的addEventListener,但这并不起作用。我将感激任何解决此问题的建议,谢谢!

local widget=require("widget")
local native=require("native")
local listTextFields={}

local positionY=display.contentCenterY

-- 任何textField的处理
local function textFieldHandle( event )
    if ( event.phase == "began" ) then
    elseif ( event.phase == "ended" or event.phase == "submitted" ) then
        --???
    elseif ( event.phase == "editing" ) then
        --???
    end
end

--这是按钮的事件
local function buttonEvent_1 (event)
    listTextFields[#listTextField+1]=native.newTextField{
    x=display.contentCenterX,
    y=positionY,
    width=100,
    height=50
    }
    positionY=positionY+70

    --这是主要问题
    lisTextFields[#listTextFields]:addEventListener("userInput",textFieldHandle)
    --但在这种情况下,我不知道如何为textField构建处理函数,因为我不知道哪个textField有焦点。
end

-- 按钮
local propertiesButton =
{
left = display.contentCenterX,
top = display.contentCenterY - display.contentHeight/2,
width = 80,
height = 80 ,
label= "Add",
defaultFile = "defaultButton.png",
overFile = "overButton.png",
onPress=buttonEvent_1
}
button1 = widget.newButton(propertiesButton)
点赞
用户3893454
用户3893454

textField 的属性 focus 不存在(虽然可以设置聚焦,但不能查询当前状态)。

当然是可以查询的。有一种方法可以知道哪个 textField 被聚焦了。 首先在你的事件处理器之前,让我添加一个用于测试的 display.newText()

local test = display.newText( " ", 100, 100, nil, 20 )

现在为每一个 textField 添加一个 id 属性,在创建每个 textField 后,我们添加如下代码:

listTextFields[#listTextField+1]=native.newTextField{
x=display.contentCenterX,
y=positionY,
width=100,
height=50
}

listTextFields[#listTextFields].id = #listTextFields

为了确定哪个 textField 具有焦点,我们可以在事件处理器中使用 event.phase == "began" 条件。我们可以通过 event.target 访问 textField。因此,我将显示具有聚焦的 textField 的id:

local function textFieldHandle( event )
if ( event.phase == "began" ) then
test.text = "The Focus on the textField # " .. event.target.id
end
end
2015-10-10 10:42:32