美文网首页iOS学习交流JC专题iOS开发技巧
iOS:在xib文件中使用另外一个xib文件

iOS:在xib文件中使用另外一个xib文件

作者: 三十六_ | 来源:发表于2016-04-25 12:46 被阅读2305次

    在自定义View的时候我们会遇到在一个xib文件中用到一个View,而这个View也是用xib文件定义的,接下来就说一下如何在.xib中加载其他的xib文件。
    结构大概是这样(假设是在MainView中使用HeadView.xib):

    结构

    首先在HeadView.h文件里添加view属性:

    @property (nonatomic, weak) IBOutlet UIView *view;
    

    然后在HeadView.m文件中写上加载xib文件的代码:

    - (instancetype)initWithCoder:(NSCoder *)aDecoder {
        if (self = [super initWithCoder:aDecoder]) {
            [self setup];
        }
        return self;
    }
    
    - (void)setup {
        [[NSBundle mainBundle] loadNibNamed:@"HomeGasStationView" owner:self options:nil];
        [self addSubview:self.view];
    }
    

    接下来把HeadView.xib的File's Owner改为HeadView(注意这里是File's Owner的Class不是View的Class):

    把HeadView.xib的File's Owner改为HeadView

    接着点击File's Owner 按住control拖线到xib的View上面,选择之前写的view:

    拖线选择view

    在MianView.xib添加一个view控件并设置它的Class为上边准备好的HeadView:

    屏幕快照 2016-04-24 下午11.38.10.png

    此时便大功告成啦,运行成功。

    相关文章

      网友评论

      • 0271fb6f797c:lz,我这死循环了,能给想个解决方案吗?
      • noonez:我也弄了这个东东,是用SWIFT写的,大概原理差不多,不过我实现了预览
        http://www.jianshu.com/p/16bc857f547e
        三十六_:@枫三十 嗯 看了你的文章了,不错!
      • 3a05f73bf1a5:不知道楼主你布局的autolayout还有效不?反正我这边MainView无法再限制HeadView的frame了。
        3a05f73bf1a5:HeadView的根本无法根据MainView对其的约束来改变大小的····,打从一开始的xib,大小已经死了。
        3a05f73bf1a5:对啊,我本来就是这样设的,你确定换过机型测试过?
        三十六_:@takero autolayout是有效的,你应该在HeadView中去做里面控件的约束,然后在MainView里对headView添加约束
      • 3a05f73bf1a5:autoulayout失效了
      • codingZero:不错,不过有点投机取巧了,其实是把xib添加到一个同名的view上,然后把这个view添加到MainView上的。如果这样的话,那就没必要弄那么复杂。设置File's owner,.h文件添加属性,拖线,这三步都可以省略,把setup方法里的代码换成[self addSubview:[[NSBundle mainBundle] loadNibNamed:@"xib名称" owner:nil options:nil].firstObject];就可以了
        wMellon:但是这样会有个问题,如果headerView里面有属性需要设置的话就没地方可以设置了
        0271fb6f797c:一直死循环啊,兄弟
        三十六_:@codingZero 也是哦,没想起来还能这样,非常感谢你的评论,受教👍

      本文标题:iOS:在xib文件中使用另外一个xib文件

      本文链接:https://www.haomeiwen.com/subject/gsbfrttx.html