注册UITableViewCell以便重用时,会调用该单元上的哪个init方法?

时间:2013-03-06 04:44:52

标签: ios objective-c uitableview initialization

我正在尝试使用UITableViewCell的自定义子类,其样式设置为UITableViewCellStyleSubtitle,并将其与registerClass:forCellReuseIdentifier:一起使用。但是,我不知道该怎么做。

我的想法是覆盖init方法并调用

self = [super initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:myReuseIdentifier];

在其中。但是,我无法弄清楚调用哪个init方法(或者这是否是正确的方法。)

我试图拦截所有以下的init方法,但在出列单元格时它们似乎都不是正确的:

  • init
  • initWithCoder
  • initWithFrame

我已确认dequeueReusableCellWithIdentifier:forIndexPath:正在返回正确类型的单元格,因此我知道它正在创建。我只是不知道调用了哪个init方法,所以我无法设置默认样式。

2 个答案:

答案 0 :(得分:35)

我相信它调用initWithStyle:reuseIdentifier:表单元格init。

来自apple docs

  

dequeueReusableCellWithIdentifier:

     

如果您为指定的标识符注册了一个类并且必须创建一个新的单元格,则此方法通过调用其initWithStyle:reuseIdentifier:方法来初始化该单元格。对于基于nib的单元格,此方法从提供的nib文件加载单元格对象。如果现有单元可用于重用,则此方法将调用单元的prepareForReuse方法。

Ĵ

答案 1 :(得分:2)

[[head-slap]]我是个白痴!我试图在init调用的主体中添加的方法......

initWithStyle:reuseIdentifier:

... 我应该重写的那个!

在这里找到它......

Setting style of UITableViewCell when using iOS 6 UITableView dequeueReusableCellWithIdentifier:forIndexPath:

投票结束我自己的问题。但是,希望这篇文章的简洁性能够帮助其他人避免阅读另一篇文章中多余的细节。