iphone - 在 awakeFromNib 中访问 View ?

标签 iphone objective-c cocoa-touch

我一直在尝试在 awakeFromNib 中设置 UIImageView 背景颜色(见下文)

[imageView setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:1.0]];

当它不起作用时,我意识到可能是因为 View 尚未加载,我应该将颜色更改移动到 viewDidLoad。

我可以验证我是否有这个权利吗?

加里

EDIT_002:

我刚刚开始了一个新项目来从头开始检查这个。我像往常一样设置 View 。结果是控件确实在 awakeFromNib 中设置为 (null)。这是我所拥有的:

代码:

@interface iPhone_TEST_AwakeFromNibViewController : UIViewController {
    UILabel *myLabel;
    UIImageView *myView;
}
@property(nonatomic, retain)IBOutlet UILabel *myLabel;
@property(nonatomic, retain)IBOutlet UIImageView *myView;
@end

.

@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];
}

输出:

awakeFromNib ...
myLabel: (null)
myView : (null)
viewDidLoad ...
myLabel: UILabel
myLabel: UIImageView

我很想知道这是否可行,从文档看来应该可行,但考虑到我通常设置的方式,我不太明白为什么在这种情况下不行。

最佳答案

还有一个答案 :-) 看起来您会出现这种行为,因为 Controller 延迟加载 View 。 View 不会立即加载,它会在有人第一次调用 view 访问器时加载。因此,当您收到 awakeFromNib 时,NIB 加载过程已完成,但不是针对您 View 中的对象。看这段代码:

@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);
}

这个日志:

#1: 0
#2: 0
#3: 1

但是如果你强制加载 View :

- (void) awakeFromNib
{
    NSLog(@"#1: %i", !!foo);
    [super awakeFromNib];
    [self view]; // forces view load
    NSLog(@"#2: %i", !!foo);
}

日志变成这样:

#1: 0
#3: 1
#2: 1

关于iphone - 在 awakeFromNib 中访问 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2723042/

相关文章:

iphone - 在CoreData中存储时间(小时:分钟)

ios - 使用 PDF 阅读器在 iPhone 中下载 pdf 时阅读

objective-c - 应用程序仅在 xcode 仪器中崩溃

ios - 完善 UICollectionView 布局转换中的 subview 大小调整

cocoa-touch - 让对象淡入淡出

iphone - 拒绝后提交 iOS 二进制文件

android - 波长照相机

iphone - NSMutableArray 没有将值传递给 CellForRowAtIndexPath?

ios - 通过 View 层次结构传播触摸事件(UIView 内的 UIButton)

iphone - 构建独立的类