从XIB加载的iPhone SDK自定义视图没有显示?

时间:2011-08-08 01:36:52

标签: iphone xcode uiview xib

我在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再次在调试器中有明显的信息。它会按预期显示在自定义视图中。

1 个答案:

答案 0 :(得分:3)

当您第一次访问self.view属性时,视图控制器通过调用loadView来延迟加载其视图,self.view默认情况下从NIB加载视图。通过访问initWithNibName:bundle:方法中的viewDidLoad:,您要求视图控制器在控制器完成初始化之前加载其视图。

尝试将此代码移至self.view。这将保证{{1}}在您访问它时已经延迟加载。