版本記錄
版本號 | 時間 |
---|---|
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修飾符,感興趣的給個贊或者關注~~~~