2

Ti.UI.TableViewRowの'className'プロパティが、カスタム行を作成するときにどのように役立つかを知りたいです。

たとえば、次の方法でテーブルビューにカスタム行を入力します。

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:]現在データの表示に使用されていないが、すでに必要な子ビューを持っている「reservoir」(ここでは「className」は「identifier」)から行オブジェクトをフェッチするメソッドを使用することで実現されます。その中に正しくレイアウトされているため、含まれているデータ(テキスト、画像データなど)を更新するだけで済みます。

このシステムは信じられないほど単純なので、TitaniumAPIで採用されている方法がこれをサポートしていないと私は信じるのに多くの問題を抱えています。

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 に答える