UITableView中的自定义UITableViewCell问题

时间:2013-11-26 16:36:29

标签: objective-c uitableview uiviewcontroller

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

我已经使用界面构建器创建了自定义单元格,并手动编码,结果相同。唯一明显的区别是,当它与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时,' cell'应该是零,但不是。同样,唯一值得注意的区别是UIView / UITableView vs UITableViewController。这对任何人都有意义吗?有人能提供解决方案吗?谢谢!

1 个答案:

答案 0 :(得分:2)

  

但是,出于某种原因,在我的cellForRowAtIndexPath:中,在初始加载时,cell不是nil,因此它应该是,因此实例化自定义单元格的代码永远不会被调用

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

  

如果dequeueReusableCellWithIdentifier:方法要求在故事板中定义的单元格,则该方法始终返回有效单元格。如果没有等待重用的回收单元,则该方法使用故事板本身中的信息创建新的单元。这样就无需检查nil的返回值并手动创建单元格。