XIB ファイルから読み込んでいる UITableViewCells がいくつかあります。セルが消えたときに [UITableView reloadRowsAtIndexPaths:withRowAnimation:] メソッドを呼び出すまで、すべてが素晴らしいです。[UITableView reloadData] を呼び出すと、すべての検索結果が読み込まれます。ビューのオンとオフでセルをスクロールすると、セルも再表示されます。変。
[UITableView reloadRowsAtIndexPaths:withRowAnimation:] を呼び出すと、UITableView はキャッシュされたセルを再利用しようとせず、cell = [tableViewCells objectAtIndex:cellId]; で新しいセルを取得しようとすることにも気付きました。
これが私のコードです:
- (void)viewDidLoad
{
...
// the objects from the XIB files are loaded onto an NSArray instance variable at viewDidLoad
tableViewCells = [[NSBundle mainBundle] loadNibNamed:@"ProfileTableViewCell" owner:nil options:nil];
...
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
int cellId = /* some logic to get the correct cellID */
NSString *CellIdentifier = [NSString stringWithFormat:@"ProfileTableViewCell_%d", cellId];
ProfileTableViewCell *cell = (ProfileTableViewCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil)
{
cell = [tableViewCells objectAtIndex:cellId];
// additional work to setup subviews for the cell
[cell prepareSubviews];
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
}
}
念のため、[ProfileTableViewCell prepareSubviews] で行っていることをいくつか示します。
- (void)prepareSubviews
{
...
[self.containerView.layer setCornerRadius:3];
[self.containerView.layer setBorderColor:UIColorFromRGB(0xCDCDCD).CGColor];
[self.containerView.layer setBorderWidth:2.0];
[self.containerView.layer setMasksToBounds:YES];
[self.containerView.layer setShouldRasterize:NO];
[self.containerView.layer setRasterizationScale:[UIScreen mainScreen].scale];
...
}
私を助けてくれる素晴らしい人に前もって感謝します。