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

咱就举个栗子:

我一个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




以上,谢谢

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值