2015-05-20 3 views
2

Из документа от Apple о UIAppearance:UIAppearance экземпляры в иерархии

Чтобы настроить появления для экземпляров класса, содержащихся в экземпляре класса контейнера, или экземпляры в иерархии, используйте + appearanceWhenContainedIn: для соответствующий внешний вид прокси.

В любой заданной иерархии зрения выигрывает внешний внешний вид. Специфика (глубина цепи) - это тай-брейк.

Иными словами, оператор сдерживания рассматривается как частичный порядок. Учитывая конкретное упорядочение (фактическая иерархия подчинения), мы выбираем частичный порядок, который является первым уникальным совпадением при чтении фактической иерархии из окна вниз.

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

Рассмотрим случай, что я хочу стиль UITableViewCells только экземпляр конкретного UITableViewController подкласса

[[UITableViewCell appearance] setTintColor:[UIColor whiteColor]]; 

Но только для одного из SomeXYZTableViewController's экземпляров, то есть для двух различных экземпляров SomeXYZTableViewController, я хочу другой оттенок цвета ,

Есть много других способов сделать это, но я просто задаюсь вопросом, возможно ли это.

ответ

2

Но только для одного из экземпляров в SomeXYZTableViewController в

Это, конечно, возможно, но давайте рассмотрим более простой и вероятный способ сделать это. Вы можете подклассифицировать UITableView. Назовем подкласс WhiteTableView. Он ничего не делает; это просто подкласс. Вы сделали бы один из ваших таблиц видом WhiteTableView.

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

примера я даю в своей книге - от реальной жизни - это:

[[UIBarButtonItem appearance] 
    setTintColor: [UIColor myGolden]]; 
[[UIBarButtonItem appearanceWhenContainedIn: 
    [UIToolbar class], nil] 
     setTintColor: [UIColor myPaler]]; 
[[UIBarButtonItem appearanceWhenContainedIn: 
    [UIToolbar class], [DrillViewController class], nil] 
     setTintColor: [UIColor myGolden]]; 

Это означает, что:

  1. В общем, барных элементах кнопки должны быть окрашены золотыми.

  2. Но элементы панели на панели инструментов являются исключением: они должны быть бледнее.

  3. Но элементы панели на панели инструментов в представлении DrillViewController являются исключением из исключения: они должны быть золотыми.

+0

Для еще несколько примеров - также из реальной жизни - видеть мою книгу: http://www.apeth.com/iOSBook/ch25.html#_appearance_proxy – matt

+0

Кстати, способность делать это причина придерживаться Objective-C. По какой-то причине я не понимаю, вы не можете использовать 'appearanceWhenContainedIn:' из Swift. – matt

+0

Я вижу.Это то, чего я действительно не хотел делать. Похоже на излишнюю сумму за очень небольшую плату. Думаю, я просто использую другие методы для этого. Благодарю. – p0lAris

Смежные вопросы