在 titanium appacelerator 中设置 View 和 TextView 的 ID

Set the ID of View and TextView in titanium appacelerator

我正在创建一个用于随机创建 textAreas 的 for,但我需要知道用户按下了哪个 textArea。

有什么方法可以为每个 textArea 输入唯一的 ID 吗?

我如何创建 textView:

var txtArea = Ti.UI.createTextArea({
  color : '#000',
  backgroundColor : 'transparent',
  font: {
    fontSize : 28,
    fontWeight : 'normal',
  },
  editable : false,
  textAlign : 'left',
  value : a[i],
  textAlign : 'center',
  top : '30%',
  width : '100%',
  height : '100%'
});

我尝试输入 "id : i",但所有文本区域都返回相同的 ID。

如果你想分配一个数字 ID,你的方法是正确的,但我认为你必须在 Table 视图的行中插入所有 TextAreas。这是因为您从 table 视图行而不是 Textarea 获取 ID。如果您在 table 视图行中插入,您的 id's attemp 是正确的。

您创建 textArea 的代码是这样的:

var txtArea = Ti.UI.createTextArea({
    id: i,
    value : "test n " + i,
    textAlign : 'left',
    textAlign : 'center',
    top : '30%',
    width : '100%',
    height : '100%'
});

您还可以获得每行的 id,只需添加一个 click 事件监听器,在特定情况下:

tableViewRowName.addEventListener('click', function(e) {
    console.log(e.source.id);
}

让我知道是否有效,请随时与我联系。

完整示例

在你的控制器 js 中

var win = Ti.UI.createWindow();
var scrollableView = Ti.UI.createScrollView();
var table = Ti.UI.createTableView();
var tableData = [];
for(var i=0;i<list.length;i++){
    var row = Ti.UI.createTableViewRow();
    var txtArea = Ti.UI.createTextArea({
       id: i,
       value : "test n " + i,
       textAlign : 'left',
       textAlign : 'center',
       top : '30%',
       width : '100%',
       height : '100%'
   });        

   row.add(txtArea);
   tableData.push(row);
}
table.setData(tableData);
scrollableView.add(table);
win.add(scrollableView);
win.open();

这就是我的意思:在您的结构中,您已经有一个空的 table 视图。 你在你的控制器中动态地填充这个 table,带有一个循环(for or while it's same)。

每次迭代,您都会使用相应的 TextArea 推送行,并在循环结束时用 setData

填充 table

此致

不建议向 Titanium 代理添加自定义属性。这是我会做的(基于我对您尝试实现的目标的猜测):

for(var i = 0; i < 10; i++){
    var txtArea = Ti.UI.createTextArea({
        value : "test n " + i,
        textAlign : 'left',
        textAlign : 'center',
        top : '30%',
        width : '100%',
        height : '100%'
    });
    (function(){
        var id = i;
        txtArea.addEventListener('click',function(){
            console.log(id);
        });
    })();
}