initwithstyle:reuseIdentifier: 未调用

Posted

技术标签:

【中文标题】initwithstyle:reuseIdentifier: 未调用【英文标题】:initwithstyle:reuseIdentifier: not called 【发布时间】:2011-12-15 15:27:14 【问题描述】:

我正在创建自己的自定义 UITableViewCell 以用作原型单元的后端。在我的课程中,我重写了initwithstyle:reuseIdentifier: 方法来进行一些自定义初始化,但是我的初始化程序没有被调用。我在其中的第一行有一个断点,在dequeueResusableCellWithIdentifier: 上也有一个断点。调用dequeueResusableCellWithIdentifier: 方法,它返回一个初始化的单元格,但没有到达initwithstyle:reuseIdentifier: 中的断点。任何帮助都会很棒。

【问题讨论】:

请向我们展示您的UITableViewDataSource 的代码,它在哪里创建和返回单元格。 我也有同样的问题。但我没有使用故事板,而是以编程方式创建它。有谁知道为什么 initWithStyle 没有被调用? 【参考方案1】:

如果您的单元格是从情节提要原型(您已在 IB 中声明为自定义类)创建的,则不会使用 initWithStyle... 创建单元格,而是使用 initWithCoder: 创建单元格,就像从笔尖加载的任何其他对象一样.如果您有任何设置代码,它应该在那里或awakeFromNib 中。

【讨论】:

文档中是否有地方指出从笔尖加载时总是使用 initWithCoder?您的回答有所帮助,但我想阅读相关文档以防我遗漏了其他内容。 好问题!我能找到的最接近的是here,在“初始化在界面生成器中创建的视图实例”下 嗯,很有趣,他们建议使用 awakeFromNib 进行任何初始设置。那么 initWithCoder 是否每次都会被调用? 是的。 AwakeFromNib 稍有不同,它在 nib 中的所有内容都已加载之前不会被调用,但在单元格的情况下,这通常没什么区别。 你刚刚救了我的培根,先生 :)【参考方案2】:

有了故事板,一切都变了。这是被调用的方法。

-(id)initWithCoder:(NSCoder *)aDecoder 
    if ( !(self = [super initWithCoder:aDecoder]) ) return nil;

    // Your code goes here!

    return self;

【讨论】:

【参考方案3】:

如果您使用 StoryBoarsd,那么 UITableViewContoller 不会调用 initWithStyle 将其替换为 initWithCoder 它现在可以工作

【讨论】:

以上是关于initwithstyle:reuseIdentifier: 未调用的主要内容,如果未能解决你的问题,请参考以下文章