具有“接口”构建器的nib文件顶部的公共标头视图

时间:2010-04-12 21:10:04

标签: iphone uiview interface-builder

.Hi,

我有一个nib文件,其中包含将在我的大多数视图中使用的标头,因此我可以在需要时只更改一次布局。我想知道是否可以使用界面构建器添加标头笔尖视图,或者是否需要以编程方式执行此操作以及如何完成。

我考虑过将子视图的子类设置为自动加载nib文件的UIView子类。

- (id)initWithFrame:(CGRect)frame {

    UIView *cell;

    NSArray *nib = [[NSBundle mainBundle] loadNibNamed: @"MainHeaderView"
                                                 owner: self
                                               options: nil];

    for (id oneObject in nib) 
        if ([oneObject isKindOfClass: [UIView class]]) 
            cell = (UIView *) oneObject;

    if ((self = [super initWithFrame: [cell frame]])) {
        // Initialization code
    }
    return self;
}

但这似乎也不起作用。

2 个答案:

答案 0 :(得分:0)

它应该起作用,至少在理论上是这样。就此而言,很久以前,应该可以(但需要付出相当多的努力)通过IB添加它,从以前称为调色板;我相信这个选项已经重新创建了。

我想说从initWithFrame:加载可能不起作用。其他可能加载的地方是awakeFromNib(关于多个笔尖加载的警告,导致它被多次调用)或viewDidLoad。尝试将加载移至viewDidLoad,看看您的cell是否已连接。您还应测试是否未能加载笔尖(nil返回)。

答案 1 :(得分:0)

好的,我已经用另一种方式解决了这个问题。

我已经为所有需要显示标题的视图创建了headerView和控制器,以及UIViewController的子类,并使用标头加载它们。像这样:

@implementation MyDefaultViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    MyTestAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    [self.view addSubview: [appDelegate.headerViewController view]];
}

每个需要标题的视图都会有一个控制器,它是MyDefaultViewController的子类。似乎工作,虽然我没有指定放置标题的位置让我有点害怕xD