我是新开发者,两个问题如下
在控制器中,为什么我不能调用该
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 的子类中调用,因为视图可能具有需要布局的子视图。如果我没记错的话,layoutSubviewsUIView 上的 会在awakeFromNib.
希望这可以帮助!
awakeFromNib在它的 nib 中的所有连接都被创建和设置后,在控制器上被调用。
initWithNibName是类的指定初始化器。在代码中创建控制器时调用它。
layoutSubviews是您实现的一种方法,可让您为子视图提供精确的布局。
您还应该知道initWithCoder从 xib 文件或情节提要创建控制器时调用的初始化程序是什么。