版本记录
| 版本号 | 时间 |
|---|---|
| V1.0 | 2018.04.17 |
前言
iOS中的视图加载可以有两种方式,一种是通过xib加载,另外一种就是通过纯代码加载。它们各有优点和好处,xib比较直观简单,代码比较灵活但是看着很多很乱,上一家公司主要风格就是用纯代码,这一家用的就是xib用的比较多。这几篇我们就详细的介绍一个xib相关知识。感兴趣的可以看上面写的几篇。
1. xib相关(一) —— 基本知识(一)
2. xib相关(二) —— 文件冲突问题(一)
3. xib相关(三) —— xib右侧标签介绍(一)
4. xib相关(四) —— 连线问题(一)
5. xib相关(五) —— 利用layout进行约束之界面(一)
6. xib相关(六) —— 利用layout进行约束之说明和注意事项(二)
7. xib相关(七) —— Storyboard中的segue (一)
8. xib相关(八) —— Size Classes(一)
IBOutlet
这个是我们拖动属性的修饰符,用来标识该属性来自xib。

@property (weak, nonatomic) IBOutlet UIView *tipView;
IBAction
这个是我们拖动方法的修饰符,用来标识该属性来自xib。

- (IBAction)buttonDidClick:(UIButton *)sender
{
}
IBInspectable
在OC中的IBInspectable,它修饰的属性或者实例变量,会显示在xib中的属性栏中(Show the Attributes inspector),IBInspectable是可以用代码影响xib的。

下面我们看一下ViewController关联的SB,可以看见,这个属性也在xib上有所体现。

可见,这个属性已经在xib有所体现了。
IB_DESIGNABLE
在OC中将IB_DESIGNABLE写在@implementation前,在swift中将@IBDesignable写在class前。它的作用是可以在不运行的情况下把你的代码显示在xib或SB文件中。
还有二点说明:
这是一个针对UI显示的功能,所以只能是在
UIView及其子类或者NSView及其子类上生效。要想使
IB_DESIGNABLE起作用必须把代码写在drawRect里才能显示,同样的代码,写在了awakeFromNib里就不会再xib中看出效果,只有写在了drawRect才可以。
看一下下面这个例子。

在Main.storyboard中放一个UIView,接着绑定类。

在JJCustomView中,加入下面代码
IB_DESIGNABLE @implementation JJCustomView
- (void)drawRect:(CGRect)rect
{
UIBezierPath *firtPath =
[UIBezierPath bezierPathWithOvalInRect:CGRectMake(10, 10, 180, 180)];
CAShapeLayer *shapeL = [CAShapeLayer layer];
shapeL.lineWidth = 20;
shapeL.path = firtPath.CGPath;
shapeL.strokeStart = 0;
shapeL.strokeEnd = 1;
shapeL.strokeColor = [UIColor redColor].CGColor;
shapeL.fillColor = [UIColor clearColor].CGColor;
[self.layer addSublayer:shapeL];
self.layer.cornerRadius = 30;
self.layer.masksToBounds = YES;
}
下面我们在看一下Main.storyboard中的变化。

IBOutletCollection
首先放四个按钮

将基于IBOutlet创建的对象放在一个NSarray里,里面放的是用IBOutlet创建的UIView。

@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *button;
这样四个按钮就都链接到这个集合数组上了。

下面看一下打印输出的地方
- (void)awakeFromNib
{
[super awakeFromNib];
NSLog(@"self.button = %@", self.button);
}
下面看打印输出结果
2018-04-17 23:45:00.592962+0800 JJWebImage[1673:98680] self.button = (
"<UIButton: 0x7feb2550eea0; frame = (118 464; 46 30); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x60000003ba80>>",
"<UIButton: 0x7feb2550f8f0; frame = (118 371; 46 30); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x60000003c400>>",
"<UIButton: 0x7feb2550f2b0; frame = (118 280; 46 30); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x60000003ba60>>",
"<UIButton: 0x7feb2550f5d0; frame = (118 555; 46 30); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x60000003c280>>"
)
后记
本篇主要介绍了几个IB修饰符,感兴趣的给个赞或者关注~~~~
