我想在CSS中做类似的事情而不是“BODY {color:red;}”,但是在客观C中。我的意思是如果我有10个不同的UIView,我想一次改变所有的UIView文本颜色。
干杯
答案 0 :(得分:0)
for (UIView *v in styledViews) {
// apply current style here
}
我怀疑这是你的情况
免责声明:我对以下代码无法保证,它可以在我的模拟器上运行,这并不意味着它不会在用户手中爆炸。我写它是因为它很有趣并可能帮助托马斯解决他的问题。我没有彻底检查文档,因为它已经是凌晨5点了
1)在某些StyleManager
类中封装样式内容(在此示例中,applyCurrentStyle:
将当前样式应用于传递给它的任何视图)。它应该在每次更改样式时发布通知(例如kStyleManagerNotificationStyleChanged)
2)使用公开UIView
方法制作UIView+Style
类别(例如setStyleManager:
)。
3)实施它:
#import "UIView+Style.h"
#import <objc/runtime.h>
@interface StyleSubscription : NSObject {
StyleManager *styleManager;
NSObject *subscriber;
}
@property (readonly) StyleManager *styleManager;
- (id)initWithStyleManager:(NSObject*)p subscriber:(NSObject*)s;
@end
@implementation StyleSubscription
@synthesize styleManager;
- (id)initWithStyleManager:(StyleManager*)sManager subscriber:(NSObject*)s {
if (self = [super init]) {
styleManager = [sManager retain];
subscriber = s;
}
return self;
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:subscriber
name:kStyleManagerNotificationStyleChanged
object:styleManager];
[styleManager release];
[super dealloc];
}
@end
@implementation UIView (Style)
static char styleSubsriptionKey;
- (StyleManager*)styleManager {
StyleSubscription *s = objc_getAssociatedObject(self, &styleSubsriptionKey);
return s.styleManager;
}
- (void)styleChanged:(NSNotification*)n {
[[self styleManager] applyCurrentStyle:self];
}
- (void)setStyleManager:(StyleManager*)sManager {
if ([self styleManager] == sManager) {
return;
}
StyleSubscription *subscr = nil;
if (sManager != nil) {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(styleChanged:)
name:kStyleManagerNotificationStyleChanged
object:sManager];
subscr = [[[StyleSubscription alloc] initWithStyleManager:sManager
subscriber:self] autorelease];
}
objc_setAssociatedObject(self, &styleSubsriptionKey, subscr, OBJC_ASSOCIATION_RETAIN);
[sManager applyCurrentStyle:self];
}
@end
每次样式管理器发布通知时,通讯记录视图将以新样式更新。取消分配后,View将自动取消订阅样式通知。可以明确删除样式管理器[view setStyleManager:nil]
。
答案 1 :(得分:0)
你可以用一种很好的方式解决这个问题。这是一个教程
http://dot-ios.blogspot.com/2013/02/design-uilabel-in-optimize-way-for.html