私はサブクラス化したUITableViewSourceを持っています。私はそうのように、getcellををオーバーライドし、私自身のサブクラス化細胞を使用しています:UITableViewDelegateの問題 - RowSelectedが間違ったNSIndexPathを与える
public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
{
MarketItem item=_tableItems[indexPath.Section].Items[indexPath.Row];
MarketCell cell=tableView.DequeueReusableCell(_cellIdentifier) as MarketCell;
if (cell==null)
{
cell=new MarketCell(UITableViewCellStyle.Subtitle,_cellIdentifier,item);
}
// decorate the cell
// ...
return cell;
}
これは動作しますが、私は私のUITableViewDelegateでイベントを取得するときに、インデックスパスは私に間違ったセル(AccessoryButtonTapped、WillSelectRowなどのようなイベント)を取得します。
セクションと行番号が正しく見えるが、私は
tableView.CellAt(indexPath)
を行うとき、私は間違ったセルを取得します。 (行とセクション番号が再び正しい見える。)注意すべき
もの:
- テーブルは常に更新されている - の項目は、テーブルが
- をInvokeOnMainThread'dれる別のスレッドに到着行とセクションのみが追加されます - 並べ替えや削除は一切行われません。
- 「WillSelectRow」を取得したときに更新を一時停止すると、それは役に立ちません
- もっとも興味深いことに)毎回新しいセルを作るとDequeueReusableCellを行うよりも、正しく動作します。
私はそれが自分の作ったばかげたバグだとは思っていませんが、見つけられません。どんな援助も最も感謝して受け取ります! http://simon.nureality.ca/?p=91
基本的には、UITableViewCellのをサブクラス化していないが、代わりに「MarketCellController」としてのUIViewControllerのサブクラス:
のあなたはtable.ReloadData()テーブルのデータが更新されるたびに呼び出していますか? – Luke
新しい行が追加されたときのみ - 既存のセルへの更新のために、ReloadRows()を実行しています – vlad259
これはセルのキューイングに関連している可能性があります。あなたのMarketCellコンストラクタは、新しく作成されたセルに_cellIdentifierをどのように割り当てますか? – riha