巧用KeyPath設(shè)置Storyboard

UIStoryboard這個(gè)東西讓人又愛(ài)又恨,有些大觸執(zhí)著使用純代碼布局,而很多和我一樣的新手還是更加喜歡這種相對(duì)簡(jiǎn)單雖然有很多麻煩的小公舉。

UIStoryboard里通過(guò)IB可以配置很多屬性,比如給一個(gè)UIButton設(shè)置tittle、image。

而當(dāng)給控件設(shè)置圓角的時(shí)候,我們需要使用到KeyPath方法,原理和代碼的是一樣的,只是給了開(kāi)發(fā)者直接在UIStoryboard上的自定義空間。


給一個(gè)控件增加了5半徑的圓角

此處的KeyPath和代碼中的是一毛一樣的,所以我們完全可以利用它做“任何事”。


下面是我的方式:

創(chuàng)建一個(gè)NSObject的分類,我的叫“NSObject+KeypathForSB”。(其實(shí)好像弄UIView的分類比較靠譜點(diǎn),不過(guò)我這里直接偷懶用了超級(jí)父類)

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)別類地執(zhí)行自己想要的操作。

PS:此法在作為L(zhǎng)aunchScreen的UIStoryboard中是無(wú)效的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容