用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中的效果