【问题标题】:Common header view on top of nib files with Interface builder使用界面生成器在 nib 文件顶部的通用标题视图
【发布时间】:2010-04-12 21:10:04
【问题描述】:

.嗨,

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

我考虑过将subview的子类设置为自动加载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;
}

但这似乎也不起作用。

【问题讨论】:

    标签: iphone uiview interface-builder


    【解决方案1】:

    至少在理论上应该可以。就此而言,应该有可能(但需要付出很大的努力)通过 IB 添加它,从很久以前以前称为调色板的地方;我相信该选项已被重新创建。

    我会说从initWithFrame: 加载可能不起作用。其他可能的加载位置是awakeFromNib(需要注意多个笔尖加载会导致它被多次调用)或viewDidLoad。尝试将负载移至viewDidLoad,并查看您的cell 是否已连接。您还应该测试是否加载笔尖失败(nil 返回)。

    【讨论】:

      【解决方案2】:

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

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

      @implementation MyDefaultViewController
      
      - (void)viewDidLoad {
          [super viewDidLoad];
      
          MyTestAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
          [self.view addSubview: [appDelegate.headerViewController view]];
      }
      

      每个需要标题的视图都会有一个控制器,它是 MyDefaultViewController 的子类。似乎有效,尽管我没有指定标题的放置位置这一事实让我有点害怕 xD

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-31
        • 1970-01-01
        • 2015-07-03
        • 1970-01-01
        相关资源
        最近更新 更多