从xib加载自定义UIView

时间:2017-05-03 12:26:48

标签: ios objective-c iphone uiview xib

我有一个自定义UIView我以这种方式加载

- (id)initWithFrame:(CGRect)frame withDelegate:(id)del
{
    self = [super initWithFrame:frame];
    UIView *myView;

    if (self)
    {
        NSArray* nibViews = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class])
                                                      owner:self
                                                    options:nil];
        for (id object in nibViews) 
        {
            if ([object isKindOfClass:[self class]])
            myView = object;
        }

        myView.frame = frame;
        myView.backgroundColor = [UIColor clearColor];

        [self addSubview: myView];
    }

    self.delegate = del;
    return self;
}

当UIView方法返回self时,在Interface Builder中链接的所有出口都是nil时,加载这样的视图。这不是正确的方法吗?

4 个答案:

答案 0 :(得分:0)

使用此方法从bundle

加载特定的xib
UINib *nib = [UINib nibWithNibName:NSStringFromClass([self class]) bundle:nil];

答案 1 :(得分:0)

试试这个:

 self = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class])
                                              owner:self
                                            options:nil] objectAtIndex:0];

答案 2 :(得分:0)

使用此

myView =[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self.class) owner:self options:nil].firstObject];

或者简单一点,你可以使用

myView = [nibViews firstObject]

答案 3 :(得分:0)

据我所知,您在xid中提供IBOutlet,当您尝试加载视图时,您提供的这些值为nil。这是预期的,因为您创建onew viwe并将xib中的视图添加为子视图。所以parrent视图没有设置这个值。 要解决这个问题,你需要在加载视图时重做方法。 请尝试使用此:

+ (id)createWithFrame:(CGRect)frame withDelegate:(id)del
{


    NSArray* nibViews = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class])
                                                      owner:nil
                                                    options:nil];
    <Provide class name> *myView = nibViews[0];
    myView.frame = frame;
    myView.backgroundColor = [UIColor clearColor];

    myView.delegate = del;
    return myView;
}