在 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);
});
})();
}
我正在创建一个用于随机创建 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
此致
不建议向 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);
});
})();
}