0

我正在尝试创建一个自定义 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 作为参考?我应该删除它还是保留它?在此处输入图像描述

谢谢

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

4

2 回答 2

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];
}

我希望它会有所帮助

于 2013-10-08T15:02:18.703 回答
-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];
}
于 2013-02-28T22:43:41.860 回答