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:
委托方法。
我已将此表视图设置为 delegate
和 dataSource
作为表视图控制器。并且它的.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 不使用情节提要重用单元格的主要内容,如果未能解决你的问题,请参考以下文章
带有自定义单元格的 ViewController 内的 UITableView 没有情节提要
当所有单元格都是静态的时将单元格添加到 UITableView(在情节提要中设计)
如何拥有具有两种不同单元格类型的 UITableView 并以编程方式设置每个单元格布局,而不是通过情节提要?