Lud*_*uda 29 objective-c uiviewcontroller uiview ios
有什么viewDidLoad用UIView?
我有一个UIViewxib.我想在加载时隐藏其中一个子视图.我试着用这个.
- (id)initWithCoder:(NSCoder *)aDecoder{
....
_theView.hidden = YES;
}
Run Code Online (Sandbox Code Playgroud)
但是_theView在这一点上,子视图是零.
这个答案没有帮助我,becouse在创建的那一刻UIViewController,在UIView还没有建立.它是以编程方式创建的,稍后会创建.
Reb*_*cca 20
AwakeFromNib仅在从nib文件加载视图时调用.
layoutSubviews为所有视图调用,您可以_loaded = yes;在layoutSubviews函数中添加bool 并知道视图是否已加载.
接受的答案是误导性的.将始终调用awakeFromNib,而不仅仅是使用nib.来自苹果文档:
awakeFromNib:
从Interface Builder存档或nib文件加载后,准备接收器以进行维修.
在下一个例子中我只使用了一个storyBoard你可以很容易地测试它.
这是我们的ViewController:

ViewController.m:
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"viewDidLoad");
}
-(void)awakeFromNib
{
NSLog(@"awakeFromNib in view controller");
}
@end
Run Code Online (Sandbox Code Playgroud)
RedView.m:
#import "RedView.h"
@implementation RedView
-(void)awakeFromNib
{
NSLog(@"awakeFromNib inside RedView");
self.green.hidden = YES;
}
@end
Run Code Online (Sandbox Code Playgroud)
印刷顺序:
当然,绿色视图将被隐藏.
编辑:
如果您仅使用代码创建视图但是您可以自己或更好地调用它,则不会调用awakeFromNib,创建自己的方法.
没有StoryBoard的示例(仅代码):
RedView.m:
#import "RedView.h"
@implementation RedView
-(void)loadRedView
{
NSLog(@"loadRedView");
self.green = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
self.green.backgroundColor = [UIColor greenColor];
[self addSubview:self.green];
self.green.hidden = YES;
}
@end
Run Code Online (Sandbox Code Playgroud)
ViewController.m:
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.red = [[RedView alloc]initWithFrame:CGRectMake(0, 0, 200, 200)];
self.red.backgroundColor = [UIColor redColor];
[self.view addSubview:self.red];
[self.red loadRedView];
}
@end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14656 次 |
| 最近记录: |