我是新开发者,两个问题如下
在控制器中,为什么我不能调用该
awakeFromNib
方法?-(void)awakeFromeNib { NSLog(@"awakeFromNib");// can't be printed ? }
方法
awakeFromNib
和initWithNibName
,layoutSubviews
有关系吗?我应该何时何地使用它们?
我是新开发者,两个问题如下
在控制器中,为什么我不能调用该awakeFromNib
方法?
-(void)awakeFromeNib
{
NSLog(@"awakeFromNib");// can't be printed ?
}
方法awakeFromNib
和initWithNibName
,layoutSubviews
有关系吗?我应该何时何地使用它们?
您的视图控制器可能没有从 NIB 中唤醒,而是已初始化 initWithNibName:bundle:
。只有从 NIB 初始化的对象才能获得awakeFromNib
.
当视图初始化时,有一个方法会被调用,无论是从 NIB 还是loadView
:viewDidLoad
使用viewDidLoad
完成几乎与您期望的相同的事情awakeFromNib
。
正如 Abizem 建议的那样,当您的视图控制器是从情节提要创建时,您可能可以使用awakeFromNib
它,但之后仍会viewDidLoad
立即调用。
- (void)awakeFromNib
仅在从笔尖或情节提要直接加载的对象内部调用。这通常不是UIViewController。
因此,awakeFromNib
不在视图控制器上的原因是视图控制器是调用其子视图以从方法中设置的 nib 唤醒的视图控制器initWithNibName:bundle:
。该layoutSubviews
方法也在 UIView 的子类中调用,因为视图可能具有需要布局的子视图。如果我没记错的话,layoutSubviews
UIView 上的 会在awakeFromNib
.
希望这可以帮助!
awakeFromNib
在它的 nib 中的所有连接都被创建和设置后,在控制器上被调用。
initWithNibName
是类的指定初始化器。在代码中创建控制器时调用它。
layoutSubviews
是您实现的一种方法,可让您为子视图提供精确的布局。
您还应该知道initWithCoder
从 xib 文件或情节提要创建控制器时调用的初始化程序是什么。