UITableView 不使用情节提要重用单元格

Posted

技术标签:

【中文标题】UITableView 不使用情节提要重用单元格【英文标题】:UITableView not reusing cells with storyboard 【发布时间】:2014-12-15 12:44:13 【问题描述】:

我正在开发一个 ios 7+ 应用程序,我在情节提要中有一些 UITableViewController 表现出奇怪的行为。我在其中一个中定义了一个基本原型单元,在情节提要中也设置了标识符@“standardCell”。在关联的UITableViewController 类中,我有这个:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

   // Return the number of sections.
   return 1;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

   // Return the number of rows in the section.
   return 20;


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

   static NSString *cellIdentifier = @"standardCell";
   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

   if (cell == nil) 
      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
   

   cell.textLabel.text = [NSString stringWithFormat:@"%d", indexPath.row];

   return cell;

单元格在表格视图显示的第一时间被加载,但是当我滚动表格内容时,所有设置的单元格标题都显示为空,并且不再调用cellForRowAtIndexPath:。既不调用didSelectRowAtIndexPath: 委托方法。

我已将此表视图设置为 delegatedataSource 作为表视图控制器。并且它的.h 文件符合UITableViewController <UITableViewDataSource, UITableViewDelegate>

我发现另一个表格视图和关联的视图控制器存在类似问题,其中原型单元格是自定义单元格:当我滚动表格时,单元格显示错误的数据和奇怪的内容,好像单元格没有按预期出队和重用.

我会错过什么?

谢谢

【问题讨论】:

你在使用 Size 类吗? @SarimSidd 不,我既没有使用尺寸等级也没有使用自动布局 属性检查器中的 UITableViewCellStyle 是什么? @SumitGarg 原型单元格设置为Basic 样式 为什么要定义原型单元格,然后在 cellForRowAtIndexPath 中使用默认的 UITableViewCell 类? 【参考方案1】:

至少在这种方法中:

改变这个:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath


static NSString *cellIdentifier = @"standardCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

 if (cell == nil) 
  cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];


cell.textLabel.text = [NSString stringWithFormat:@"%d", indexPath.row];

return cell;

到这里:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"standardCell" forIndexPath:indexPath];

cell.textLabel.text = [NSString stringWithFormat:@"%d", indexPath.row];

return cell;

【讨论】:

以上是关于UITableView 不使用情节提要重用单元格的主要内容,如果未能解决你的问题,请参考以下文章

使用情节提要更改 UITableView 单元格的高度

带有自定义单元格的 ViewController 内的 UITableView 没有情节提要

当所有单元格都是静态的时将单元格添加到 UITableView(在情节提要中设计)

如何拥有具有两种不同单元格类型的 UITableView 并以编程方式设置每个单元格布局,而不是通过情节提要?

Xcode 静态 UITableView 单元格在情节提要中为空白

使用 plist 加载 UITableView 的内容