我可以在UITableviewCell中使用viewDidLoad方法吗?

我可以在UITableviewCell使用viewDidLoad方法吗?

不,你不写在自定义单元格类的子类UITableViewCell(它是UIViewController的一部分)viewDidLoad。你有一个方法调用

 -(void)layoutSubviews { [super layoutSubviews]; } 

在那里你可以定义框架和所有的自定义单元格controls.Refer 苹果的UITableviewCell参考

但是请注意 ,viewDidLoad 在对象的生命周期中被调用一次 ; 它就像一般的面向对象编程的初始化器。 但是,“layoutSubviews” 在每个单元格上被多次调用 (取决于滚动等问题)。 意识到这一点非常重要,因为这会使viewDidLoad中的许多事情“通常会做”, 所以在layoutSubviews中无法做到这一点。

请注意,viewDidLoad仅被调用一次 :layoutSubviews 经常被调用。

这只是一个简单的function,如果你写它。

自定义单元格教程

最好还是打电话给super.layoutSubviews() 。 Swift语法:

 override func layoutSubviews() { super.layoutSubviews() } 

如果你试图初始化你的UITableViewCell的一些IBOutlets,你可能需要去awakeFromNib()调用:

 override func awakeFromNib() { super.awakeFromNib() // Do your stuff // myIBOutlet.text = "Hello" } 

UIKit函数viewDidLoad是UIViewController的成员,而UITableViewCell不会inheritance它。 如果你愿意,你可以编写一个名为 viewDidLoad的方法,但是它不会像在UIViewController子类中那样被调用。

是的,你可以在UITableViewCell编写viewDidLoad ,但viewDidLoad不是UITableViewCell委托方法,所以它不会自动调用,所以你必须手动调用它[self viewDidLoad]来执行你的代码。

您可以使用UITableViewCell或UICollectionViewCell的initWithFrame或UIView的任何子类。

 - (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialisation code here } return self; } 

我意识到这是一个古老的线程,但我有时使用的模式(特别是如果我有我的自定义单元格的基类):

  1. 添加一个BOOL属性,称之为“cellAlreadyDidLoad”。 我这样命名,因为BOOL默认为NO,所以我不用担心在init方法中设置它。

  2. 创build一个cellDidLoad方法,它的名字是这样的,就像我们都知道和喜欢的viewDidLoad。

  3. 重写layoutSubviews方法并添加:

     if (!self.cellAlreadyDidLoad) { [self cellDidLoad]; self.cellAlreadyDidLoad = YES; } 

现在你有一个方法,cellDidLoad,只会被调用一次,知道UI元素(包括你的IBOutlets)将会出现。 非常像视图控制器上的viewDidLoad。