UIA появление внешнего прокси проблемы с появлением, когда содержится в - PullRequest
0 голосов
/ 16 февраля 2012

Я пытаюсь выделить каждый ярлык на моем фоне:

[[UILabel appearanceWhenContainedIn:[MyBackgroundView class], nil] setShadowColor:[UIColor colorWithWhite:0.6 alpha:1]];
[[UILabel appearanceWhenContainedIn:[MyBackgroundView class], nil] setShadowOffset:CGSizeMake(0, -1)];

Проблема в том, что в моем фоновом представлении есть некоторые подпредставления (например, табличное представление), метки которых должны не получить этот shadowColor.

Я попытался сделать это так:

[[UILabel appearanceWhenContainedIn:[MyBackgroundView class], nil] setShadowColor:[UIColor colorWithWhite:0.6 alpha:1]];
[[UILabel appearanceWhenContainedIn:[MyBackgroundView class], nil] setShadowOffset:CGSizeMake(0, -1)];
[[UILabel appearanceWhenContainedIn:[UITableViewCell class], nil] setShadowColor:[UIColor clearColor]];

Но тень текста все еще существует в ячейках табличных представлений.

Кто-нибудь может сказать мне, что я делаю неправильно?!?

Ответы [ 3 ]

2 голосов
/ 07 августа 2012

Вы не можете использовать прокси-сервер UIAppearance для настройки UILabel вообще.См. этот вопрос .Попытка сделать это, по моему опыту, приводит к противоречивым и запутанным результатам.

(я также видел проблему, когда установка appearanceWhenContainedIn:[somethingElse] на UILabel приводит к игнорированию всех других вызовов [UILabel appearance])

1 голос
/ 16 февраля 2012

Я бы создал подкласс UILabel и установил для него вид тени.

0 голосов
/ 05 марта 2012

Я думаю, у вас есть два варианта:

  1. Вы можете заключить эти измененные элементы управления в собственный контейнер и использовать:

    @implementation ChildViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        [[UILabel appearanceWhenContainedIn:self.class, nil] setShadowColor:[UIColor colorWithWhite:0.6 alpha:1]];
        [[UILabel appearanceWhenContainedIn:self.class, nil] setShadowOffset:CGSizeMake(5.0, 5.0)];
    }
    
    @end
    

    Изменения будут применены только к экземплярам UILabel, размещенным в контейнере ChildViewController

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

...