fuz*_*oat 10 iphone cocoa-touch objective-c
我一直在尝试在awakeFromNib中设置UIImageView背景颜色(见下文)
[imageView setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:1.0]];
Run Code Online (Sandbox Code Playgroud)
当它不起作用时,我意识到它可能是因为视图尚未加载,我应该将颜色更改移动到viewDidLoad.
我可以证实我有这个权利吗?
加里
EDIT_002:
我刚开始一个新项目,从一个干净的开始检查这一点.我像往常一样设置视图.结果是控件确实在awakeFromNib中设置为(null).这是我有的:
码:
@interface iPhone_TEST_AwakeFromNibViewController : UIViewController {
UILabel *myLabel;
UIImageView *myView;
}
@property(nonatomic, retain)IBOutlet UILabel *myLabel;
@property(nonatomic, retain)IBOutlet UIImageView *myView;
@end
Run Code Online (Sandbox Code Playgroud)
.
@synthesize myLabel;
@synthesize myView;
-(void)awakeFromNib {
NSLog(@"awakeFromNib ...");
NSLog(@"myLabel: %@", [myLabel class]);
NSLog(@"myView : %@", [myView class]);
//[myLabel setText:@"AWAKE"];
[super awakeFromNib];
}
-(void)viewDidLoad {
NSLog(@"viewDidLoad ...");
NSLog(@"myLabel: %@", [myLabel class]);
NSLog(@"myView : %@", [myView class]);
//[myLabel setText:@"VIEW"];
[super viewDidLoad];
}
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
awakeFromNib ...
myLabel: (null)
myView : (null)
viewDidLoad ...
myLabel: UILabel
myLabel: UIImageView
Run Code Online (Sandbox Code Playgroud)
我很想知道这是否应该起作用,从它看起来应该是的文档,但考虑到我通常设置的方式,我不能理解为什么它不在这种情况下.
zou*_*oul 29
还有一个答案:-)看起来你得到这种行为,因为控制器懒洋洋地加载视图.视图不会立即加载,它会在第一次有人调用view访问者时加载.因此,当您收到awakeFromNibNIB加载过程时,但不会查看视图中的对象.看到这段代码:
@property(retain) IBOutlet UILabel *foo;
@synthesize foo;
- (void) awakeFromNib
{
NSLog(@"#1: %i", !!foo);
[super awakeFromNib];
NSLog(@"#2: %i", !!foo);
}
- (void) viewDidLoad
{
NSLog(@"#3: %i", !!foo);
}
Run Code Online (Sandbox Code Playgroud)
这个日志:
#1: 0
#2: 0
#3: 1
Run Code Online (Sandbox Code Playgroud)
但是如果你强制加载视图:
- (void) awakeFromNib
{
[super awakeFromNib];
[self view]; // forces view load
NSLog(@"#1: %i", !!foo);
}
Run Code Online (Sandbox Code Playgroud)
日志更改为:
#3: 1
#1: 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11315 次 |
| 最近记录: |