私はIBで作成したカスタムUITableViewCellを持っています。 NIBからロードされたこれらの細胞のインスタンスとのUITableViewを移入するために、私は次のコードを使用します。UITableViewCellフレームのNaN値が
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"overviewCell";
HOStoreOverviewCell *cell = (HOStorwOverviewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
UIViewController *c = [[UIViewController alloc] initWithNibName:@"HOStoreOverviewCell" bundle:[NSBundle mainBundle]];
cell = (HOStoreOverviewCell *)c.view;
}
HOStore *itemAtIndex = (HOStore *)[self.infoController storeInListAtIndex:indexPath.row];
cell.storeName.text = itemAtIndex.name;
cell.distance.text = [itemAtIndex niceDistance];
cell.hours.text = [itemAtIndex.currentHour niceHours];
NSLog(@"%@", cell);
return cell;
}
HOStoreOverviewCellはNIBの私のカスタムUITableViewCellのであり、それは3 UILabels(StoreNameを、距離、時間)が含まれてい。したがって、このコードは再利用可能なセルをデキューしようとします。できない場合は、NIBからロードして新しいセルを作成します。次に、UILabelsのテキストを配列内の項目(HOStore's)からの情報の関連ビットに設定します。かなり標準的なもの。
私の問題はこれです:ほとんどのセルは適切に表示されますが、今度は(そして、これを確実に再現することができませんでした)、UITableViewはセルを「見逃す」でしょう - たとえば、10番目のセル第12細胞ではなく、第11細胞ではない。代わりに11番目のセルがあるはずの空白の場所があり、この場所をタップしても効果はありません。空白の下の任意の場所をタップすると、didSelectRowAtIndexPath:indexPathデリゲートメソッドが生成され、indexPath.rowは常に欠落しているインデックス(たとえば11)に設定されます。 2行目のフレームに
2009-08-26 00:22:29.292 AppName[380:207] <HOStoreOverviewCell: 0x42c9880; baseClass = UITableViewCell; frame = (0 660; 320 66); autoresize = W; layer = <CALayer: 0x42c9a60>>
2009-08-26 00:22:30.331 AppName[380:207] <HOStoreOverviewCell: 0x42c9880; baseClass = UITableViewCell; frame = (0 nan; 320 66); autoresize = W; layer = <CALayer: 0x42c9a60>>
2009-08-26 00:22:32.138 AppName[380:207] <HOStoreOverviewCell: 0x42c71d0; baseClass = UITableViewCell; frame = (0 594; 320 66); autoresize = W; layer = <CALayer: 0x42c73b0>>
注ナン:のNSLog出力(抜粋)を見ると
問題のルートが表示されます。これはcellForRowAtIndexPath:indexPathコールバックに対応し、 "空の"セルがスクロールして表示されるときに取得します。
何が原因なのかについてのアイデアはありますか?