今天照例擼代碼,看到如下設(shè)計圖.在設(shè)計圖的上看到有許多的地方都有一個紅色提醒標(biāo)識.于是就想著做一個類似Badge的控件.開始想自定義一個這樣的控件,但是發(fā)現(xiàn)如果要實(shí)現(xiàn)一個類,這樣其他已有的視圖可復(fù)用性太低,最后打算給uiview寫一個cagetory.

設(shè)計API接口的時候就想著如果一個方法里面的參數(shù)過多,就會過度設(shè)計.但是如果參數(shù)太少,可復(fù)用性就差.最后決定用 objc_setAssociatedObject 和 objc_setAssociatedObject 來動態(tài)的為uiview加上badge這樣的屬性.
我們都知道,catagory之所以不能給一個類添加屬性是因?yàn)榫幾g器在最開始就已經(jīng)分配好了內(nèi)存,所以無法在添加任何實(shí)例變量,但是有了runtime,讓一切皆有可能.
具體實(shí)現(xiàn)的代碼如下:









[cellshowBadgeWithStyle:WBadgeStyleNumbervalue:8];
cell.badgeCenterOffset=CGPointMake(-40,22);

還未解決的問題:如果視圖使用autolaoout布局,就無法獲得具體frame,badged就無法出現(xiàn)在右上角,只能出現(xiàn)在左上角.