Как изменить цвет всех моих текстов приложений (UILabel, UITableCell .....)? - PullRequest
0 голосов
/ 15 марта 2011

Я хотел бы сделать что-то похожее в CSS, чем "BODY {color: red;}", но в объекте C. Я имею в виду, если у меня есть 10 разных UIView, я бы хотел изменить цвет всех текстов UIView за один раз.

Приветствия

Ответы [ 2 ]

0 голосов
/ 26 февраля 2013

Вы можете исправить это хорошим способом. Вот учебник

http://dot -ios.blogspot.com / 2013/02 / дизайн-UILabel-в-оптимизируют-полосная-for.html

0 голосов
/ 15 марта 2011

Простой случай - вы как-то собрали их вместе

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].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...