【问题标题】:Custom view with nib as subview doesn't seem to be loading似乎没有加载 nib 作为子视图的自定义视图
【发布时间】:2011-02-15 16:29:39
【问题描述】:

我创建了一个从 nib 加载其内容的自定义视图,如下所示:

/* PricingDataView.h */

#import <UIKit/UIKIt.h>

@interface PricingDataView : UIView {
  UIView *contentView;
}
@property (nonatomic, retain) IBOutlet UIView *contentView;
@end

/* PricingDataView.m */

#import "PricingDataView.h"

@implementation PricingDataView
@synthesize contentView;

- (id)initWithFrame:(CGRect)frame {
  if ((self = [super initWithFrame:frame])) {
    [[NSBundle mainBundle] loadNibNamed:@"PricingDataView" owner:self options:nil];
    [contentView setFrame:frame];
    [self addSubview:contentView];
  }
  return self;
}

/* ... */

在 nib 文件中我将PricingDataView 设置为文件所有者的类型,并在 IB 中连接了contentView 出口。我将接口库中的常规UIView 放置到向用户显示的全尺寸视图上,然后将其类名更改为PricingDataView。这一切都在构建,但在运行时,我的自定义视图应该在的位置没有呈现任何内容。

我在PricingDataView.initWithFrame 中设置了断点,但它们没有命中,所以我知道我遗漏了一些会导致视图被初始化的东西。我很好奇的是,在从笔尖加载我的其他视图的过程中,所有的初始化都发生在我身上,但不是这个。为什么?

【问题讨论】:

    标签: iphone objective-c interface-builder views nib


    【解决方案1】:

    只需撤消您添加到 UIView 的视图的类名 (PricingDataView)。在这种情况下,initWithFrame: 方法将被调用。

    以前awakeFromNib 被循环调用。由于您的customView 和View 您通过Nib 添加为subView 属于同一类类型。

    【讨论】:

      【解决方案2】:

      当您在运行时在 Interface Builder 中添加文件时,它会调用 -(id)initWithCoder:(NSCoder *)aDecoder 而不是 initWithFrame。

      【讨论】:

        【解决方案3】:

        您确定您的其他视图没有使用UIViewController?这是来自documentation 的引用initWithFrame: 来自UIView:

        如果你使用 Interface Builder 来设计 你的界面,这个方法不是 当您的视图对象被调用时 随后从 nib 文件加载。 nib 文件中的对象是 重组然后初始化 使用他们的 initWithCoder: 方法, 它修改了属性 视图以匹配存储在 笔尖文件。详细信息 关于如何从 nib 加载视图 文件,请参阅 Resource Programming Guide。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-10-08
          • 1970-01-01
          • 1970-01-01
          • 2011-11-27
          • 1970-01-01
          • 2021-03-07
          • 1970-01-01
          相关资源
          最近更新 更多