Titanium 钛合金TableViewRow类名,带有自定义行

Titanium 钛合金TableViewRow类名,带有自定义行,titanium,tableview,allocation,classname,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.createLabe

我想知道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);
}
函数populateTableView(表视图,数据){
var行=[];
var行;
标题、图像;
var i;
对于(i=0;i
当然,使用TableViewRow的标准
标题
图像
属性可以轻松创建“自定义”行的示例,但这不是重点。如何防止分配表视图的新标签、图像视图和其他子视图,以利于它们的重用?我知道,在iOS中,这是通过使用方法
-[UITableView dequeueReusableCellWithIdentifier:
从“库”(此处“className”是“identifier”)获取行对象来实现的,该库当前未用于显示数据,但已在其中正确放置了所需的子视图,因此,只需要更新其中包含的数据(文本、图像数据等)

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


在阅读了API并搜索了web之后,我怀疑情况就是这样。建议使用“className”属性作为一种简单的方法,以使Tianium中的表视图更高效,但没有以任何方式解释它与自定义表视图行的关系。如果有人能为我澄清此事,我将不胜感激。

Tianium SDK使用
-[UITableView dequeueReusableCellWithIdentifier::
重用单元布局。在UITableView代理(Tianium SDK 2.1.3)中,您有:

TiUITableView.m(第1720行)


此代码用于重用布局单元。您可以在Apple文档中看到有关此方法的更多信息。

谢谢您向我指出这一点,但是我在哪里可以找到与调用的javascript函数的连接?就像连接到
row=Ti.UI.createTableViewRow()
或者当设置了
类名时(顺便说一句,我在这段代码中没有这样做,但我可能应该这样做…),那么,这就是连接。当您使用
Ti.UI.createTableViewRow()
创建UITableViewRow时,属性tableClass被设置,UITableView委托使用它来重用单元格。我看到您看到了它,但我看不到如何使用javascript方法
Ti.UI.createTableViewRow()
到Objective-C方法
-tableView:CellForRowatineXpath:
。我现在的理解是:每次创建
TiUITableView行
,并
add()
将它们添加到
TiUITableView
代理对象“系统”不知怎的记住了这一点,以确保使用正确的参数多次调用ObjC方法
-tableView:cellforrowatinexpath:
,以确保
UITableview
对象在显示之前获得正确的
UITableViewRow
?cellforrowatinexpath是tableView委托,这是从iOS自动调用的。它不需要被调用。当UITableViewRow被构造为显示给用户时,将调用它。回答你的问题?哦,对,我知道;),当然可以!答复:)。但还有一件事:
[TiUITableViewRowProxy clearTableRowCell:cell]清除单元格(我在TiUITableViewRowProxy.m中进行了检查。在我看来,这似乎与人们希望发生的完全相反,不是吗?
- (UITableViewCell *)tableView:(UITableView *)ourTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...
    UITableViewCell *cell = [ourTableView dequeueReusableCellWithIdentifier:row.tableClass];
    ...
}