UIStoryboard這個(gè)東西讓人又愛(ài)又恨弟翘,有些大觸執(zhí)著使用純代碼布局箩做,而很多和我一樣的新手還是更加喜歡這種相對(duì)簡(jiǎn)單雖然有很多麻煩的小公舉莽红。
UIStoryboard里通過(guò)IB可以配置很多屬性,比如給一個(gè)UIButton設(shè)置tittle邦邦、image安吁。
而當(dāng)給控件設(shè)置圓角的時(shí)候,我們需要使用到KeyPath方法燃辖,原理和代碼的是一樣的鬼店,只是給了開(kāi)發(fā)者直接在UIStoryboard上的自定義空間。
此處的KeyPath和代碼中的是一毛一樣的黔龟,所以我們完全可以利用它做“任何事”妇智。
下面是我的方式:
創(chuàng)建一個(gè)NSObject的分類(lèi),我的叫“NSObject+KeypathForSB”氏身。(其實(shí)好像弄UIView的分類(lèi)比較靠譜點(diǎn)巍棱,不過(guò)我這里直接偷懶用了超級(jí)父類(lèi))
NSObject+KeypathForSB.h
在.h中只是注釋 用來(lái)標(biāo)識(shí)一些自己用到的KeyPath
#import@interface NSObject (KeypathForSB)
// 利用sb中的keypath設(shè)定一下自定義屬性或調(diào)用部分方法
/**
*? Key Path : backgroundColorForHl
*? Type? ? : UIColor
*? Object? : UIButton
*/
/**
*? Key Path : backgroundColorForSl
*? Type? ? : UIColor
*? Object? : UIButton
*/
/**
*? Key Path: borderColor
*? Type? ? : UIColor
*? Object? : UIView
*/
/**
*? Key Path: placeholderColor
*? Type? ? : UIColor
*? Object? : UITextField
*/
@end
NSObject+KeypathForSB.m
#import "NSObject+KeypathForSB.h"
#import "UIImage+Custom.h"
@implementation NSObject (KeypathForSB)
- (void)setValue:(id)value forUndefinedKey:(NSString *)key {
if ([self isKindOfClass:[UIButton class]]) {
[self buttonHandleWithKey:key value:value];
}
if ([self isKindOfClass:[UIView class]]) {
[self viewHandleWithKey:key value:value];
}
if ([self isKindOfClass:[UITextField class]]) {
[self textFieldHandleWithKey:key value:value];
}
}
#pragma view
- (void)viewHandleWithKey:(NSString *)key value:(id)value {
UIView *view = (UIView *)self;
if ([key isEqualToString:@"borderColor"]) {
UIColor *color = (UIColor *)value;
view.layer.borderColor = color.CGColor;
}
}
#pragma button
- (void)buttonHandleWithKey:(NSString *)key value:(id)value {
UIButton *btn = (UIButton *)self;
if ([key isEqualToString:@"backgroundColorForHl"]) {
[btn setBackgroundImage:[UIImage createImageWithColor:value] forState:UIControlStateHighlighted];
}
if ([key isEqualToString:@"backgroundColorForSl"]) {
[btn setBackgroundImage:[UIImage createImageWithColor:value] forState:UIControlStateSelected];
}
}
#pragma textField
- (void)textFieldHandleWithKey:(NSString *)key value:(id)value {
UITextField *tf = (UITextField *)self;
if ([key isEqualToString:@"placeholderColor"]) {
[tf setValue:value forKeyPath:@"placeholderLabel.textColor"];
}
}
@end
在.m實(shí)現(xiàn)中,我就是利用了“- (void)setValue:(nullable id)value forUndefinedKey:(NSString *)key”這個(gè)方法蛋欣,在UIStoryboard里寫(xiě)自定義KeyPath然后在上述方法中分門(mén)別類(lèi)地執(zhí)行自己想要的操作航徙。
PS:此法在作為L(zhǎng)aunchScreen的UIStoryboard中是無(wú)效的