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: 未调用的主要内容,如果未能解决你的问题,请参考以下文章