在xib中嵌套使用xib臂痕,如果使用不正確會(huì)導(dǎo)致子xib最后加載不出來(lái)(具體原因可以查看第一篇參考文章)匾南。可行的方法如下:
新建工程馏锡,創(chuàng)建test.xib雷蹂,設(shè)置個(gè)顏色,拖個(gè)label進(jìn)去杯道。
創(chuàng)建test類匪煌。
選中test.xib中file's owner,然后在它的Inspector (cmd + opt + 3) 中設(shè)置它的Custom Class為test。
在test.m中重寫- (instancetype)initWithCoder:(NSCoder *)aDecoder方法:
- (instancetype)initWithCoder:(NSCoder*)aDecoder{self= [superinitWithCoder:aDecoder];if(self) {UIView*containerView = [[[UINibnibWithNibName:NSStringFromClass([selfclass]) bundle:nil] instantiateWithOwner:selfoptions:nil] firstObject ];? ? ? ? containerView.frame=self.bounds;? ? ? ? [selfaddSubview:containerView];? ? }returnself;}
5.在父xib(storyboard就行)中拖一個(gè)View,在該View的Inspector中設(shè)置它的Custom Class為test党巾。
6.運(yùn)行看看效果萎庭。
7.如果想要控制test.xib中的label的話,只需要將test.xib中的label與test類中的@property (weak, nonatomic) IBOutlet UILabel *label;關(guān)聯(lián)即可齿拂。
需要注意的點(diǎn):
加載containerView時(shí)需要使用[UINib nibWithNibName:NSStringFromClass([self class]) bundle:nil] instantiateWithOwner:self options:nil],而不要使用[[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:nil options:nil] firstObject]驳规,否則當(dāng)你將test.xib中的label與test類中的label屬性關(guān)聯(lián)后運(yùn)行程序時(shí)會(huì)發(fā)生崩潰,具體原因不詳创肥。达舒。值朋。如果有人曉得的話可以告訴我。巩搏。昨登。
參考文章:
Nested Xib Views - 使用XIB實(shí)現(xiàn)嵌套自定義視圖
iOS Interface Builder:在.xib文件中加載另一個(gè).xib文件
= =.第一次寫文章,只是為了記錄一下自己遇到的問(wèn)題贯底,方便以后如果忘記了進(jìn)行查閱丰辣。如果不小心幫到了哪位小伙伴那就更好了,要是有看不明白的地方希望告訴我禽捆,我會(huì)修改笙什。有的地方我也認(rèn)識(shí)的不是很深刻,要是有哪些地方出錯(cuò)了還希望能夠指出來(lái)胚想,不勝感激琐凭。
轉(zhuǎn)載自:http://www.reibang.com/p/e63958d9f08b