開發者在日常開發過程中,需要頻繁的使用原生元件,並且每次建立原生元件的時候都會建立編寫很多初始化方法。導致一些繁瑣的開發工作。這個時候就可以使用ios category分類來對原生元件進行擴充套件新增,在不改變原來類內容的基礎上,為類增加一些方法達到快速開發的乙個過程
使用場景
初步使用
/** 預設textfield */
+ (instancetype)ym_textfieldwithframe:(cgrect)frame
placeholder:(nsstring *)placeholder
font:(cgfloat)font
textcolor:(uicolor *)textcolor
tag:(nsinteger)tag;
/** 預設textfield + 風格設定 + 背景顏色 */
+ (instancetype)ym_textfieldwithframe:(cgrect)frame
backgroundcolor:(uicolor *)backgroundcolor
placeholder:(nsstring *)placeholder
font:(cgfloat)font
textcolor:(uicolor *)textcolor
borderstyle:(uitextborderstyle)borderstyle
tag:(nsinteger)tag;
/** 預設textfield + 鍵盤樣式 + 是否隱藏輸入 */
+ (instancetype)ym_textfieldwithframe:(cgrect)frame
placeholder:(nsstring *)placeholder
font:(cgfloat)font
textcolor:(uicolor *)textcolor
keyboardtype:(uikeyboardtype)keyboardtype
securetextentry:(bool)securetextentry
tag:(nsinteger)tag;
.m檔案
+ (instancetype)ym_textfieldwithframe:(cgrect)frame
placeholder:(nsstring *)placeholder
font:(cgfloat)font
textcolor:(uicolor *)textcolor
tag:(nsinteger)tag
+ (instancetype)ym_textfieldwithframe:(cgrect)frame
placeholder:(nsstring *)placeholder
font:(cgfloat)font
textcolor:(uicolor *)textcolor
keyboardtype:(uikeyboardtype)keyboardtype
securetextentry:(bool)securetextentry
tag:(nsinteger)tag
+ (instancetype)ym_textfieldwithframe:(cgrect)frame
backgroundcolor:(uicolor *)backgroundcolor
placeholder:(nsstring *)placeholder
font:(cgfloat)font
textcolor:(uicolor *)textcolor
borderstyle:(uitextborderstyle)borderstyle
tag:(nsinteger)tag
這樣快速建立幾個常用的uitextfield.
高階使用
在開發過程中,經常碰到快速建立元件後依舊不滿足的情況。再次編寫一些**,這個時候可以使用typedef 與block來建立。如下
例如要設定乙個背景顏色則可以先建立乙個typedef
/** 背景顏色 */
typedef uitextfield * (^ymtextfieldbackgroundcolor) (uicolor * color);
typedef uitextfield * (^ymtextfieldtag) (nsinteger tag);
然後在建立乙個使用方法
/** 背景顏色 */
@property (nonatomic, copy , readonly)ymtextfieldbackgroundcolor ym_backgroundcolor;
/** 標識 */
@property (nonatomic, copy , readonly)ymtextfieldtag ym_tag;
- (ymtextfieldbackgroundcolor)ym_backgroundcolor
- (ymtextfieldtag)ym_tag
.m檔案
#define ym_setui(x,y) \
weakself; \
return ^(x)
- (ymlabelbackgroundcolor)ym_backgroundcolor
- (ymlabeltext)ym_text
這樣的話如果在初步使用如果缺少一些方法可以這樣實現。
(例子裡面包含uitextfield封裝的所有高階的typefed)
使用在需要建立的地方使用
uitextfield * textfield = [uitextfield ym_textfieldwithframe:cgrectzero placeholder:@"" font:text_large_size textcolor:text_black_color tag:0].ym_tag(@"10");
在初始化完基礎的控制項。只需要在後面新增.ym(『value』)即可快速的實現賦值
總結這樣方法可以快速的對uitextfield進行編寫。減少開發工作中大部分的編寫時間。
資源
iOS 分類新增屬性之關聯引用
分類是不能合成屬性的,因為合成屬性會生成對應的例項變數,而分類是不允許新增例項變數的 例項變數所在記憶體區域已初始化為不可更改,無法在動態執行時修改之 雖然不能增加例項變數,但是新增屬性還是可以的,只不過需要自己在分類中實現get和set方法,同時標記屬性為動態獲取。其中一種方法叫做關聯引用,實現了...
IOS協議 IOS分類 IOS擴充套件 總結
1.協議 1.1 是一種要求,或是一種規則 1.2 對應程式來講,是只生成方法的宣告,不實現 1.3 協議必須被某個類採納,且在該類中給出協議中宣告的方法函式體 1.4 對於採納協議類的物件,可以和其它物件一樣使用 1.5 協議可以被繼承,包括多個父協議 1.6 協議可以被多重採納 下面一起看一下簡...
iOS 分類增加屬性
對於分類中 增加屬性 我的建議是 如果是唯讀屬性 那麼可以在分類中使用 如果是可變屬性 最好在 primary class 中使用 不要在分類中使用。如下 建立類 eocperson 增加分類 分類中有屬性 import eocperson.h inte ce eocperson addproper...