xib相关(九) —— 几个IB修饰符(一)

版本记录

版本号 时间
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修饰符,感兴趣的给个赞或者关注~~~~

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容