iOS:xib中加载自定义的xib控件, 解决死循环

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35927740/article/details/79940415

咱就举个栗子:

我一个tableviewcell.xib(A) 中要使用一个我自定义好的一个 view.xib(B)

A中拖好控件后,

需要在B中的.m文件中重写 initWithCode:(NSCoder*)aDecoder 方法,本意上A加载B无法直接加载到B的xib资源,所以我们在归档的方法中手动的去加载这个资源,

"一般对于这种需求,我们会选择在 init(coder:) 中加载目标 nib 然后将它作为 subview 添加到目标 view 中。"-摘自喵神

 喵神文字传送门

那么重点来了, 很多人提到说在归档方法中会死循环,确实在loadnib方法中也会调用到归档方法, 所以这里要特别注意一下, 在B的xib文件中,关联头文件很重要, 只需在File's Owner 关联类, 而在view上是不需要关联的,所以这个xib有什么属性也是在File's Owner 上来关联,

以下就是具体操作了



.h文件


#import <UIKit/UIKit.h>

@class RecordArray;

@interface MaterialAccountRecordView : UIView


@property (nonatomic, strong) MaterialAccountRecordView *customView;


@end



.m文件



#import "MaterialAccountRecordView.h"



@interface MaterialAccountRecordView ()


@end


@implementation MaterialAccountRecordView



- (id)initWithCoder:(NSCoder *)aDecoder {

    self = [super initWithCoder:aDecoder];

    if (self) {

        NSString *className = NSStringFromClass([self class]);

        _customView = [[[NSBundle mainBundle] loadNibNamed:className owner:self options:nil] firstObject];

        _customView.gjcf_size = CGSizeMake(ScreenW - 20, self.bounds.size.height);

        [self addSubview:_customView];

    }

    return self;

}

@end




以上,谢谢

展开阅读全文

没有更多推荐了,返回首页