2015-12-20 3 views
0

У меня есть UIViewController, который отображается по-разному в зависимости от контекста:Как установить значение UINavigationItem по умолчанию для конкретного UIViewController?

  • в UINavigationController «первый контроллер (без задней панели навигации)
  • в UINavigationController» с верхней контроллера (задней панели навигации)
  • как один из двух UISplitViewController «S контроллеров

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

Возможно ли это? Если да, что мне делать?

+0

Если я правильно понимаю ваш вопрос. Я думаю, вам нужно проверять каждый раз. Вы пытаетесь спросить, есть ли лучшая логика для этого? –

ответ

0

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

splitViewController возвращает ближайший UISplitViewController предок в иерархии контроллера вида. Если его нет, свойство равно nil.

navigationController по существу то же самое, что и splitViewController. Он возвращает ближайшего предка UINavigationController в иерархии контроллера вида и равен nil, если таковых нет.

Вот как бы вы определить, какой из 3-х сценариев ваш контроллер представления в (предполагая, что нет никаких других сценариев):

if let splitVC = viewController.splitViewController { 
    // split view controller scenario 
} else if let navigationVC = viewController.navigationController { 

    if navigationVC.viewControllers[0] == viewController { 
     // first controller scenario (no back button) 
    } else if navigationVC.topViewController == viewController { 
     // top controller scenario (back button) 
    } 

}