iOS 给UIView添加单独XIB文件

首先说明我不知道这个方法,有没有人知道或者已经玩熟了。但这个东西是我本身想出来。
1给UIView配置单独的XIB布局

好,咱们废话很少说开始,这种方式是我在作一个极其复杂的弹出视图时想出来的,也是用来作这个的,若是是一个ViewController的话感受不合适因此才决定在这么作的。测试

第一步1 咱们须要新建一个UIView的类,咱们看到这里的xib是勾选不了的。咱们要作就是让它有xib文件
图片描述ui

而后咱们新建一个和这个类名同样的XIB文件command+n 选择User interface 里面的View 记住这里的名字必定要和刚才咱们新建的UIView类相呼应要一致
图片描述
图片描述
OK 咱们的准备工做已经作完了,一共三个文件 HeaderView_Test.h HeaderView_Test.m HeaderView_Test.xib 肯定有了这三个文件以后咱们就能够作配置了atom

咱们打开xib文件 看到一个大方块的View 我通常会选择最小的适配3.5英寸的为了适配Iphone4 宽度320高度480的设备 选择这种是弹出窗口会占用整个视图的咱们也能够选择大的,反正视图里面想怎么用想怎么玩均可以。不要限制。spa

而后咱们选择右边第三个检查器有的人也叫属性配置器或者控件配置区,无论它叫什么咱们选择第三个 而后看到第一个配置的是 Custom Class 好咱们就动它 默认的是UIView类。咱们在这里填上咱们刚才新建的UIView类 HeaderView_Test 而后回车让它确认这个View是继承自咱们选择的类
图片描述
OK 完成了这里剩下的就是代码部分了。code

咱们回到HeaderView_Test.h 文件中定义一个静态方法 也就是类方法 。让其返回一个本身类对象自己对象

+(HeaderView_Test*)AcquireCustomView;

咱们不须要传任何参数只须要返回对象自己,通过这个方法处理完的对象自己是通过xib 初始化出来的,这就是这种方式的关键点,咱们不须要用代码加约束和代码写子View。要作的就是像普通ViewController的xib文件同样画你须要的视图和操做正常XIB同样
图片描述
好 ,咱们随便拖两个按钮或者什么其余的鬼东西,通常是弹出视图因此咱们须要 背景是毛玻璃 你能够直接调整View的颜色,也能够放张ImageView作底放一张毛玻璃的图片,而后把控件放在imageView上面 我这里是测试一个TableView的HeaderView 因此放的比较小。大家按需求来作。继承

到了这里,咱们开始写关键代码在咱们HeaderView_Test.m文件中实现咱们刚才声明的方法
图片描述图片

+(HeaderView_Test*)AcquireCustomView
{
//咱们这里须要把这个xib加载出来而这个xib的所拥有者就是当前的对象`instantiateWithOwner:`这个方法就是对此xib文件进行拥有者关联,关联这个xib是属于哪个类的咱们固然这是self
 HeaderView_Test*View = [[UINib nibWithNibName:@"HeaderView_Test" bundle:nil]instantiateWithOwner:self options:nil].lastObject;
    
    return View;
}

如今验证一下咱们的类和这个xib有没有关联,其实早就关联了只不过这里才是关联实例化这个xib里面控件的关键步骤。理论上也是实例化xib里面的控件也是经过上面的代码的完成的 。it

咱们从刚才的xib里面拖根线 定义一个属性给这个当前类HeaderView_Test
图片描述

是否是能够了,咱们如今定义这些属性。这里讲一点我无心间发现的一个奇怪的东西。其实咱们连线而后去掉线,其实至关于给这个类定义了一个属性,只不过没有实例化而已,若是实例化了这个被断掉线的属性的话,其实也能够用,这个东西等完了说这个讲起来有点麻烦要看图。

好咱们继续,如今咱们只是把这个View给建立并链接了所拥有控件当作此类的属性,如今咱们就来用他。

咱们新建一个ViewController或者大家已经有的视图控制器。想要哪里显示出来就在哪里。到达大家要填加父视图.m文件中 咱们首先整一个属性把这个咱们新建的View类当作里面的一个属性

@property(nonatomic,strong)HeaderView_Test*HeaderView;

如今咱们去懒加载一次这个View

-(HeaderView_Test*)HeaderView
{
    
    if (!_HeaderView) {
        _HeaderView = [[HeaderView_Test AcquireCustomView]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];
    }
    return _HeaderView;
    
}

由于咱们新建的View类是继承于UIView的因此自己就有初始化方法,因此咱们不须要重写除非你想在初始化的时候想修改下xib里面控件的layer或者其余什么初始化值之类的。

  • (instancetype)initWithFrame:(CGRect)frame
    {

    self = [super initWithFrame:frame];
       if (self) {
       //若是子视图只须要配置一次而后一直就是那个样子就写在初始化方法里面
           <#statements#>
       }
       return self;

    }

其实也能够在这个方法里面写均可以。

  • (void)drawRect:(CGRect)rect {

    //这里面写你对子视图的初始配置 是后期还要调用的就写在这里面

    }

若是你想在特定的时候须要从新设定子控件为初始状态的话,就写在这个方法里面。而后在想要恢复原貌或者初始值得时候调用 [_HeaderView setNeedsDisplay];View的这个方法会自动调用这个drawRect:(CGRect)rect 方法。给你的子控件从新布局或者恢复原貌赋初始值。
而后用的时候直接调用静态方法或者类方法[HeaderView_Test AcquireCustomView]这个返回的就是一个咱们自定义Xib关联的实例对象
图片描述ok 咱们就简单的介绍到这里。其余的就靠本身领悟了,其实习惯了以后。这种方式有很大的用处的。就看大家的发觉了。里面涉及的逻辑咱们能够建一个ViewModel的类来管理。或直接在里面操做。或者直接在你所在父视图控制器操做 。ViewController能够作到这个均可以作到。并且这个在不一样的需求里面。有着不一样的效果。项目须要的时候就会想起了。

相关文章
相关标签/搜索