我有一个带有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。这对任何人都有意义吗?有人能提供解决方案吗?谢谢!
答案 0 :(得分:2)
但是,出于某种原因,在我的
cellForRowAtIndexPath:
中,在初始加载时,cell
不是nil
,因此它应该是,因此实例化自定义单元格的代码永远不会被调用
这是因为UITableView
从iOS 5.0变得更聪明:如果你通过指定自定义单元格类型告诉它你想要什么类型的单元格,它会为你创建它们,所以if(cell == nil)
代码是确实从未进入过。来自documentation:
如果
dequeueReusableCellWithIdentifier:
方法要求在故事板中定义的单元格,则该方法始终返回有效单元格。如果没有等待重用的回收单元,则该方法使用故事板本身中的信息创建新的单元。这样就无需检查nil
的返回值并手动创建单元格。