美文网首页iOS程序员
IBInspectable and IB_DESIGNABLE

IBInspectable and IB_DESIGNABLE

作者: Some_apple | 来源:发表于2018-12-24 14:56 被阅读16次

前言:时常回顾自己做过的项目,从中总结经验,抽取、封装功能,这其实是一种很好的打发闲暇时间的方式。
写这篇文章,也是出于在之前项目中遇到的一个小case。希望能够帮助有相同需求的童鞋~~

OK,废话少说,步入正题。

相信iOS开发的童鞋们或多或少都有应用过Interface Builder,也就是xib文件(storyboard也是xib文件)。本人在一开始也不习惯于用IB,感觉有很多不方便,但是后来随着自己慢慢使用、以及Apple的不断更新与完善,直至现在,其实IB已经是很好用了,基本会满足所有需求。在storyboard中,拖拽一个控件,然后设置对应的属性,就OK了,相对于code,确实是省心不少。。。。但是大部分童鞋应该也注意到了,storyboard中的Attributes inspector(属性设置栏) ,可以对控件设置的属性很少,都是一些背景色、文本等最基本的属性设置,然而,在实际的在项目开发中,需要展示的效果会很多,比如说圆角、边框、边框颜色、圆角大小等等,这些属性的设置都无法在storyboard中完成,需要用code来进行单独设置,这就给很多童鞋带来的丝丝恶心:使用着IB,但是又不得不用code设置着控件的圆角、圆角大小、边框、边框颜色等。(确实是有点恶心......)

那么,今天就来说一下具体的解决方法。

首先咱们来看,如何能够在storyboard中,也能像设置backgroundColor或者width、height那样,通过Attributes inspector(属性设置栏) 来设置控件所需要的边框或是圆角等常用属性。咱们以UIView为例。

一、为UIView增加一个分类 UIView (Extension)
二、在 .h文件中,申明需要设置的属性
#import <UIKit/UIKit.h>

@interface UIView (Extension)

@property (nonatomic, assign) IBInspectable CGFloat cornerRadius;
@property (nonatomic, assign) IBInspectable CGFloat borderWidth;
@property (nonatomic, strong) IBInspectable UIColor *borderColor;

@end

大家应该注意到了IBInspectable这个关键词。
没错,这个关键词的意义就在于:让其修饰的属性能够出现在IB的Attributes inspector(属性设置栏) 中

三、在 .m文件中,实现对应属性的setter方法和getter方法
#import "UIView+Extension.h"

@implementation UIView (Extension)

#pragma mark - Setter

- (void)setCornerRadius:(CGFloat)cornerRadius {
    self.layer.masksToBounds = YES;
    self.layer.cornerRadius = cornerRadius;
}

- (void)setBorderWidth:(CGFloat)borderWidth {
    self.layer.borderWidth = borderWidth;
}

- (void)setBorderColor:(UIColor *)borderColor {
    self.layer.borderColor = borderColor.CGColor;
}


#pragma mark - Getter

- (CGFloat)cornerRadius {
    return self.cornerRadius;
}

- (CGFloat)borderWidth {
    return self.borderWidth;
}

- (UIColor *)borderColor {
    return [UIColor colorWithCGColor:self.layer.borderColor];
}

@end

此时,咱们打开storyboard,拖出一个UIView来,选中它,你就会看到在Attributes inspector(属性设置栏)中会多出来一些设置项,而这些恰就是你刚在分类中设置的那些属性: AttributesInspector.png

然后,咱们对这些属性设置一下,再运行模拟器,就可以看到对应的效果了。
是不是感觉棒棒哒,终于可以不用像以前那样恶心了,可以直接在storyboard中搞定了。

但是,又有些童鞋说了,能不能像backgroundColor那样,不用运行模拟器,就能够在storyboard中看到效果呢???
Hmmmmmmmmmm......这就是下面要说的内容啦~~
这就引出了标题中的另外一个关键词:IB_DESIGNABLE。这个关键词的意义在于:让你的自定义的通过IBInspectable修饰的属性可以在IB中预览对应效果。(Perfect~~)

那么这个关键词怎么使用呢?把它用在哪个位置呢?
其实很简单,此时,你只需要自定义一个UIView类,然后在.m文件中声明这个关键字即可:

#import "WSHLView.h"

IB_DESIGNABLE

@implementation WSHLView

@end

此时,你再打开storyboard,将你拖出的那个View的类名设置为刚才自定义的类,再设置一下你在分类中声明的那些属性,就会立刻看到效果啦。(效果图就不附上了,感兴趣的童鞋可以自行试一下~~)

通过这种方式,就可以很方便的设置类似于圆角大小、边框颜色之类的属性了。

可能有些童鞋觉着,平白无故的增加一个类而又什么操作都不做,仅仅是为了配合storyboard显示,有点多余了。其实不然,在日常开发过程中,咱们应该尽可能的运用自己自定义的类(CustomView、CustomButton、CustomLabel等),在此之上再进行后续的操作,这样既可以方便寻找问题,也可以使整个项目的整体性、自主性更好,同时也可以锻炼自己的封装、及项目架构能力(简单的自定义一个类,其实就是架构的一种起步)。

好了,今天这篇文章要分享的就是以上内容了,这些其实都是Apple官方文档所提供的解释与功能,因此,也建议各位童鞋平时尽量养成多阅读官方文档的良好习惯~~

相关文章

网友评论

    本文标题:IBInspectable and IB_DESIGNABLE

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