但是如果准备建立继承至UIView或者父类是UIView的新类时你会发现create XIB file的勾选项是不能操作的,也就是Xcode默认是不建议自定义的UIView使用XIB文件的。但是有些时候有很多不同的页面里又会使用到类似或者完全相同的小UI模块,在每个页面都要去做维护是个很不方便的感受,于是就需要用到自定义的UIView类。但是纯码毕竟很冗杂,也不利于后期的维护,于是就使用XIB自定义UIView。

首先还是和其他新建类的流程相同,New file的时候继承至UIView。

Android 自定义view的性能优化 自定义uiview_iOS

然后再建立一个空白的XIB文件或者是只有一个View的XIB文件,这里最好命名的时候和你之前建的类名一致

Android 自定义view的性能优化 自定义uiview_自定义_02

ok接下来的步骤是比较关键的,关系到能不能在类文件和XIB中建立联系

如果新建的是空白的XIB,就需要先拖一个UIView到XIB中去;如果建的是已经有的那就选中这个View。

在右边的菜单栏中找到CustomClass,然后在Class栏中填写要建立联系的类名。

Android 自定义view的性能优化 自定义uiview_UIView_03

然后你就可以在这个XIB中拖入需要用到的控件,并且可以连线设置为类的属性。

不过这样在Control中还是不能正常显示的,按照[[xxx alloc]initWithFrame:frame]建立的这个自定义UIView会是一片空白,之前费劲心里拖好的控件都不能正常显示。

我们还需要在自定义View的.h文件中写入一个方法。

+(YourClassName *)instanceView;

然后在.m文件中实现这个方法

+(<span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">YourClassName</span> *)instanceView
{
    NSArray *nibView = [[NSBundle mainBundle]loadNibNamed:@"<span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">YourXIBName</span>" owner:nil options:nil];
    return [nibView objectAtIndex:0];
}

在Control中使用的时候就这样实现

CustomView *view = [YourClassName instanceView];
    view.frame = CGRectMake(0, 0, 320, 60);
    [self.view addSubview:view];

这样就实现了用XIB文件自定义UIView