自定义UIView和loadNibNamed不起作用

时间:2013-02-28 18:15:10

标签: ios ios6

我正在尝试创建自定义UIView并将其加载到xib文件中。自定义UIView称为JtView,代码如下:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    NSLog(@"initWithFrame was called");  // this was called
    if (self) {
        // Initialization code
        [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:NULL];
        [self addSubview:self.view];
    }
    return self;
}

-(void)awakeFromNib
{
  [super awakeFromNib];
  [self addSubview:self.view];
}

在创建xib文件(文件 - >新建 - >文件 - >用户界面 - >视图)时,我删除了主窗口并从Xcode的对象调色板拖动了一个视图。我尝试使用alt拖动到JtView的标题,但这不起作用。我是否需要在此处创建关联,还是应该保留XCode创建的位置? (编辑 - 请参阅下面的评论以获得进一步说明)

我还在xib中添加了一个UILabel。

但是,当我在模拟器中运行并将背景颜色设置为红色时,标签不会显示。我是否需要在自定义UIView中创建UILabel作为参考?我应该删除它还是将其保留到位? enter image description here

THX

编辑1 这是连接和头文件的屏幕截图:

2 个答案:

答案 0 :(得分:1)

我解决了在UIView中添加一个类方法:


+ (id)customView;

+ (id)customView
{
    CustomView *customView = [[[NSBundle mainBundle] loadNibNamed:@"CustomView" owner:nil options:nil] lastObject];

    // make sure customView is not nil or the wrong class!
    if ([customView isKindOfClass:[CustomView class]])
        return customView;
    else
        return nil;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    CustomView *customView = [CustomView customView];
    //And where you gonna use it add this line:
    //this self.view refers to any view (scrollView, cellView...)
    [self.view addSubview:customView];
}

我希望它会有所帮助

答案 1 :(得分:-1)

试试这个:

-(void)awakeFromNib {
    NSArray *obj = [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
    [self addSubview:obj[0]];
}

或者如果您有一个名为" nibview"的@property IBOutlet你可以这样做:

-(void)awakeFromNib {
    [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
    [self addSubview:self.nibview];
}