Внешний вид прокси и слои - PullRequest
2 голосов
/ 08 января 2012

Можно ли использовать прокси внешнего вида iOS 5 для рефакторинга кода, который устанавливает свойства для слоев?

_button.layer.cornerRadius = 5.0f;
_button.layer.borderWidth = 1.0f;
_button.layer.borderColor = [[UIColor blackColor] CGColor];
_button.layer.masksToBounds = YES;

Ответы [ 2 ]

7 голосов
/ 27 мая 2014

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

В качестве иллюстрации я буду использовать только одно свойство из вопроса, cornerRadius:

Шаг 1: Реализуйте подкласс UIButton.

#import <UIKit/UIKit.h>

@interface MyRoundedCornerButton : UIButton

@end

Шаг 2: Добавить свойство, помеченное UI_APPEARANCE_SELECTOR.

#import <UIKit/UIKit.h>

@interface MyRoundedCornerButton : UIButton

@property (readwrite, nonatomic) CGFloat cornerRadius UI_APPEARANCE_SELECTOR;

@end

Шаг 3: Реализуйте новый класс.

@implementation MyRoundedCornerButton

- (void)setCornerRadius:(CGFloat)cornerRadius
{
    self.layer.cornerRadius = cornerRadius;
}

@end

Шаг 4: Установите радиус угла в прокси внешнего вида.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    ...
    [MyRoundedCornerButton appearance].cornerRadius = 10.0;
    ...
}

Шаг 5: Затем в IB (или там, где вы определяете создание представления) установите пользовательский класс представления (или создайте экземпляр экземпляра) MyRoundedCornerButton вместо UIButton.

Примечания: Я сделал это, чтобы применить легко меняемый градиентный фон ко всему моему приложению. В моем случае все корневые представления контроллеров представления используют собственный класс. Этот пользовательский класс предоставляет CAGradientLayer через +(Class)layerClass метод. Затем я раскрываю свойства colors и locations нижележащего градиентного слоя, используя тег UI_APPEARANCE_SELECTOR. Один раз при инициализации приложения настраивает все приложение. Вы даже можете предоставить пользователю цвета, чтобы они могли полностью настраивать цвета различных элементов управления.

2 голосов
/ 21 января 2012

Нет .. Apple говорит:

Для поддержки настройки внешнего вида класс должен соответствовать протоколу UIAppearanceContainer, а соответствующие методы доступа должны быть помечены как UI_APPEARANCE_SELECTOR.

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIAppearance_Protocol/Reference/Reference.html

И UIButton нет.

РЕДАКТИРОВАТЬ: И UIButton не имеет методов, помеченных UI_APPEARANCE_SELECTOR.

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