2

我想知道 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:]从“reservoir”(因此“className”在这里是“标识符”)获取行对象的方法来实现的,该对象当前未用于显示数据,但已经具有所需的子视图在其中正确布局,因此只需要更新其中包含的数据(文本、图像数据等)。

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

在阅读 API 并搜索网络后,我确实怀疑是这种情况。推荐使用“className”属性作为在 Titanium 中提高表格视图效率的简单方法,但未以任何方式解释其与自定义表格视图行的关系。如果有人能为我澄清这件事,我将不胜感激。

4

1 回答 1

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 文档中查看有关此方法的更多信息。

于 2012-10-16T04:58:30.923 回答