我在XIB中创建了一个自定义视图层次结构,我希望将其置于各种其他视图控制器的视图中。来自SO的提示表明我必须明确添加为子视图。 XIB在调试器中加载并查看它,它看起来是正确的,但是,有两个问题。首先,它只定义我的自定义XIB的顶层UIView,但不显示。我特意设置了不同的颜色背景,以使其显而易见。尝试将此自定义视图作为标题加载的父“OtherViewController”的代码如下:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
NSLog(@"%s", __FUNCTION__ );
if (self) {
// Custom initialization
appDelegate = (myProjectAppDelegate*) [[UIApplication sharedApplication] delegate];
NSObject *obj = [[NSBundle mainBundle] loadNibNamed:@"PageHeaderView" owner:self options:nil];
NSArray *array = nil;
if ([obj isKindOfClass:[NSArray class]]) {
array = (NSArray*) obj;
for (UIView *customView in array) {
NSLog(@"%@", customView);
if ((customView.tag == 3700) && ([customView isKindOfClass:[PageHeaderView class]])) {
[self setCustomPageHeaderView: (PageHeaderView*) customView];
[self.view addSubview: customPageHeaderView];
[self.view bringSubviewToFront: customView];
}
NSArray *array = [self.customPageHeaderView subviews];
for (NSObject *obj in array) {
NSLog(@"%s: \t%@", __FUNCTION__, obj);
}
}
} else {
NSLog(@"%s: object following loadNibNamed is [%@]", __FUNCTION__, [obj class]);
}
}
return self;
}
TAG = 3700再次在调试器中有明显的信息。它会按预期显示在自定义视图中。
答案 0 :(得分:3)
当您第一次访问self.view
属性时,视图控制器通过调用loadView
来延迟加载其视图,self.view
默认情况下从NIB加载视图。通过访问initWithNibName:bundle:
方法中的viewDidLoad:
,您要求视图控制器在控制器完成初始化之前加载其视图。
尝试将此代码移至self.view
。这将保证{{1}}在您访问它时已经延迟加载。