带有自定义行的Titanium TableViewRow类名

时间:2012-06-10 14:33:04

标签: titanium tableview allocation classname

我想知道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的标准titleimage属性可以轻松创建“自定义”行的示例,但这不是重点。如何阻止分配新标签,图像视图和表视图的其他子视图以支持它们的重用?我知道在iOS中这是通过使用方法-[UITableView dequeueReusableCellWithIdentifier:]从“库”中获取行对象来实现的(所以'className'在这里是'标识符')当前没有用于显示数据,但已经在其中正确布置了所需的子视图,因此只需要更新其中包含的数据(文本,图像数据等)。

由于这个系统非常简单,我很难相信Titanium API采用的方法不支持这个。

阅读完API并搜索网页后,我确实怀疑是这种情况。建议使用'className'属性作为在Titanium中提高表视图效率的简便方法,但它与自定义表视图行的关系不以任何方式解释。如果有人能为我澄清这件事,我将非常感激。

1 个答案:

答案 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的更多信息。