IOS中的關聯對象實現objc_setAssociatedObject

用xib做界面時常用到bind to object這個功能



這樣做的好處是,對象綁定控件後,對象值發生改變,無需手動刷新即可操作界面刷新,但是用代碼寫的控件如何實現這個功能呢

除了通知的方式外,可以用runtime機制裏面的關聯對象實現同樣的效果,如下:

objc_setAssociatedObject(goods, [@"cart"UTF8String], putBtn, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

上面這段代碼是我將一個按鈕putBtn關聯到一個商品goods對象,這個按鈕的enable狀態根據goods的一個Bool屬性cart改變,

接着,我重寫一下goods的setCart方法

- (void)setCart:(BOOL)crt{

   cart = crt;

    UIButton *associatedButton =objc_getAssociatedObject(self,[@"cart"UTF8String]);

   if(associatedButton){

        [associatedButtonsetEnabled:!crt];

    }

}

所有改變cart值的入口都在這,我在此檢測下是否有關聯的控件,如果有,操作控件的狀態發生改變,這樣就實現了上述xib中的效果


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章