Можно ли повторно использовать цвета в Интерфейсном Разработчике? - PullRequest
6 голосов
/ 11 января 2012

У меня есть несколько желтых кнопок, созданных с помощью Inteface Builder. Все имеют одинаковый цвет. В настоящее время я объявляю цвет в каждом xib. Могу ли я объявить это глобально и повторно использовать на всех xibs?

Ответы [ 6 ]

7 голосов
/ 11 августа 2013

Невозможно в Интерфейсном Разработчике. Сделайте это в коде, например, создав специальный подкласс кнопки.

Вы можете использовать системную цветовую палитру для сохранения цвета, но вам все равно нужно применять его ко всем кнопкам каждый раз, когда вы решите изменить его. Или вы можете просто использовать недавно использованные цвета в окне выбора цвета, но ни один из способов не является достаточно динамичным.

3 голосов
/ 11 августа 2013

Да, вы можете сделать это.

В нижней части всплывающего окна выбора цвета в Интерфейсном Разработчике есть ряд квадратов, которые можно использовать для хранения цветов для последующего использования. Перетащите в него цвет из прямоугольника, где текущий цвет отображается вверху палитры цветов, чтобы сохранить его, а затем просто щелкните сохраненный цвет, чтобы использовать его.

diagram showing how to save colors

1 голос
/ 10 сентября 2013

Я не верю, что есть способ сделать это полностью в конструкторе интерфейсов, к сожалению. Тем не менее, вы можете подойти довольно близко с небольшим количеством кода. Лучший способ, с помощью которого я нашел возможность изменять цвета во всем приложении за один раз, - это создать подкласс для элемента, который вы хотите раскрасить (например, UILabel), чтобы установить цвет при инициализации:

@interface HuedUILabel : UILabel
@end

@implementation HuedUILabel

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        // Initialization code
        self.textColor = [AppConfig primaryColor];
    }
    return self;
}

@end

Затем установите метку, чтобы иметь собственный класс в IB:

Теперь, когда вы хотите изменить цвет всех ваших UILabels, вы можете сделать это, изменив одноцветное определение И вам не нужно загромождать свой код кучей назначений внешнего вида.

0 голосов
/ 11 января 2012

Вот очень простая реализация категории именованных цветов для UIColor. С этим кодом в вашем проекте UIColor запомнит все цвета, которые вы хотите сохранить, и позволит вам получить доступ к вашим собственным цветам или системным цветам, используя +colorWithName:

@interface UIColor (namedColors)

+ (UIColor *) colorWithName:(NSString *) name;
+ (void) setColor:(UIColor *) color forName:(NSString *) name;

@end

static NSMutableDictionary *colorStorage;

@implementation UIColor (namedColors)

+ (NSMutableDictionary *) colorStorage
{
  if (!colorStorage)
    colorStorage = [[NSMutableDictionary alloc] initWithCapacity:10];
  return colorStorage;
}

+ (UIColor *) colorWithName:(NSString *) name
{
  UIColor *result =[[self colorStorage] valueForKey:name];  // See if we have a color with this name in the colorStorage.

  if (result) return result;

  SEL selector = NSSelectorFromString(name);  // look for a class method whose selector matches the given name, such as "blueColor" or "clearColor".

  if ([self respondsToSelector:selector] && (result = [self performSelector:selector]))
    if ([result isKindOfClass:[self class]])
      return result;

  return nil;   
}

+ (void) setColor:(UIColor *) color forName:(NSString *) name
{
  [[self colorStorage] setValue:color forKey:name];
}

@end
0 голосов
/ 11 января 2012

Вы также можете добавить категорию на UIColor, так что вы можете использовать ее так же, как и при использовании UIColor.Например, в мое приложение я добавляю новый файл с именем ApplicationColors, который содержит все цвета моего приложения.

@interface UIColor (ApplicationColours)

+(UIColor *)savaColor;

@end

Реализация:

@implementation UIColor (ApplicationColours)

+(UIColor *)savaColor
{
    return [UIColor colorWithRed:228.0f/255.0f green:86.0f/255.0f blue:86.0f/255.0f alpha:1.0f];  

}

@end

Затем, чтобы использовать его в моем приложении, я импортируюApplicationColours.h и использовать так же, как и любой другой UIColor.то есть:

label.textColor = [UIColor savaColor];
0 голосов
/ 11 января 2012

Совершенно определенно!

Создайте одноэлементный объект (можно назвать его OksanaColor, чтобы быть крутым) ...

... или, если вы действительно ленивый,UIColor доступное только для чтения свойство, к которому вы можете получить доступ из вашего делегата приложения.

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