我想知道Ti.UI.TableViewRow的'className'属性在创建自定义行时有什么用处。
例如,我使用以下方式使用自定义行填充tableview:
function populateTableView(tableView, data) {
var rows = [];
var row;
var title, image;
var i;
for (i = 0; i < data.length; i++) {
title = Ti.UI.createLabel({
text : data[i].title,
width : 100,
height: 30,
top: 5,
left: 25
});
image = Ti.UI.createImage({
image : 'some_image.png',
width: 30,
height: 30,
top: 5,
left: 5
});
/* and, like, 5+ more views or whatever */
row = Ti.UI.createTableViewRow();
row.add(titleLabel);
row.add(image);
rows.push(row);
}
tableView.setData(rows);
}
当然,使用TableViewRow的标准title
和image
属性可以轻松创建“自定义”行的示例,但这不是重点。如何阻止分配新标签,图像视图和表视图的其他子视图以支持它们的重用?我知道在iOS中这是通过使用方法-[UITableView dequeueReusableCellWithIdentifier:]
从“库”中获取行对象来实现的(所以'className'在这里是'标识符')当前没有用于显示数据,但已经在其中正确布置了所需的子视图,因此只需要更新其中包含的数据(文本,图像数据等)。
由于这个系统非常简单,我很难相信Titanium API采用的方法不支持这个。
阅读完API并搜索网页后,我确实怀疑是这种情况。建议使用'className'属性作为在Titanium中提高表视图效率的简便方法,但它与自定义表视图行的关系不以任何方式解释。如果有人能为我澄清这件事,我将非常感激。
答案 0 :(得分:2)
Titanium SDK使用-[UITableView dequeueReusableCellWithIdentifier:]
重用单元格布局。在UITableView代理(Titanium SDK 2.1.3)中,您有:
TiUITableView.m(第1720行)
- (UITableViewCell *)tableView:(UITableView *)ourTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
...
UITableViewCell *cell = [ourTableView dequeueReusableCellWithIdentifier:row.tableClass];
...
}
此代码用于重用布局单元格。您可以在Apple文档中查看有关此方法here的更多信息。