2013-11-26 123 views
1

我有一个UIViewController应用程序包含UITableView使用自定义表视图单元格的应用程序。我已成功使用与UITableViewControllers相同的自定义表格视图单元格,但这次它是UIViewController中的UITableView。我的第一个想法是,它应该没有什么不同。然而,出于某种原因,在我的cellForRowAtIndexPath中,在初始加载时,'cell'不是零,因为它应该是,因此实例化自定义单元的代码从不被调用。在UITableView自定义UITableViewCell问题

我已经创建了自定义单元格,通过使用接口生成器并通过手工编写相同的结果。唯一不同的是,当使用UITableViewController时,代码能够正常工作,但在包含UITableView的UIView中使用时会失败。

我已验证我的单元格标识符已正确配置,并且我的数据源和委托在我的UIViewController中正确设置。自定义单元格的子类已正确设置。

-(FaveCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 

FaveCell *cell = (FaveCell*)[tableView dequeueReusableCellWithIdentifier:cellID]; 
if(cell == nil){ 
    // this line of code is never reached 
    cell = [[FaveCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID]; 
} 

/* code to load controls 

... 

*/ 

return cell; 
} 

所以,当代码进入的cellForRowAtIndexPath首次,“细胞”应该是零,但事实并非如此。同样,唯一不同的是UIView/UITableView与UITableViewController。这对任何人都有意义吗?谁能提供解决方案?谢谢!

+0

你有自定义单元格的NIB吗? – hgwhittle

+0

是的,有一个自定义单元格的笔尖 – Pheepster

+0

您的表格否则看起来和行为正确,唯一的症状是'if(cell == nil)'代码没有被输入? – dasblinkenlight

回答

2

然而,出于某种原因,在我cellForRowAtIndexPath:,在初始加载,cellnil,因为它应该是,这样的代码来实例化自定义单元格不会被调用。

这是因为UITableView变得更聪明的的iOS 5.0的:如果你告诉它你想要什么样的细胞通过指定自定义单元格类型,它会创建他们,所以确实是从来没有进入if(cell == nil)代码。从documentation

如果dequeueReusableCellWithIdentifier:方法要求该公司在故事板定义的小区,该方法始终返回一个有效的单元格。如果没有等待重复使用的再循环单元格,该方法将使用故事板本身中的信息创建一个新单元格。这消除了检查nil的返回值并手动创建单元的需要。

+0

这解释了为什么使用笔尖创建的版本无法正常工作。但我也通过硬编码创建了一个自定义单元。这产生了相同的结果。硬编码版本在表视图控制器中正常工作,但不是表视图。 – Pheepster

+0

似乎没有检查一个零单元会与dequeueReusableCellWithIdentifier – Pheepster

+0

@Pheepster冲突我在我的代码中检查,以防万一苹果决定对他们的'dequeueReusableCellWithIdentifier:'方法的实现做一些新的事情(和不兼容)。只要实例化是你在'if'里面做的唯一事情,它就不会受到伤害(除非你依赖于在'if'内部调用的特定的初始化器,并且*不是*由table view调用的相同初始化器)。 – dasblinkenlight

相关问题