Как использовать hidesBottomBarWhenPhed, если я хочу скрыть панель вкладок только для одного вида контроллера? - PullRequest
3 голосов
/ 07 июня 2011

У меня возникли проблемы при использовании hidesBottomBarWhenPressed ... Я вставлю три контроллера - A, B и C - в навигационный контроллер по порядку, и я хотел бы скрыть нижнюю панель вкладок, когда отображается B. (и A является одним из контроллеров панели вкладок)

У кого-нибудь есть идеи?

Ответы [ 3 ]

9 голосов
/ 07 февраля 2013

В контроллере представления A (который находится на панели вкладок), когда наступает время представления B (не требуется tabBar):

self.hidesBottomBarWhenPushed = YES; // hide the tabBar when pushing B
[self.navigationController pushViewController:viewController_B animated:YES];
self.hidesBottomBarWhenPushed = NO; // for when coming Back to A

В контроллере представления B, когда приходит время представлять C (снова хотел tabBar):

self.hidesBottomBarWhenPushed = NO; // show the tabbar when pushing C
[self.navigationController pushViewController:viewController_C animated:YES];
self.hidesBottomBarWhenPushed = YES; // for when coming Back to B
8 голосов
/ 28 декабря 2011

Вместо того, чтобы устанавливать его в viewDidLoad, я обнаружил, что иногда это слишком поздно.Установите его в init или переопределите hidesBottomBarWhenPressed, чтобы вернуть YES для представлений без нижней панели инструментов.

2 голосов
/ 18 мая 2015

Из документации hidesBottomBarWhenPhed:

Если ДА, нижняя строка остается скрытой до тех пор, пока контроллер представления не извлечется из стека.

Это означает, что если вы неЧтобы знать, в каком порядке будут выталкиваться контроллеры представления, вам нужно, чтобы все контроллеры представления из стека имели для hidesBottomBarWhenPush значение false, за исключением topViewController.

Так что я делаю

  1. перед нажатием нового View Controller я установил его свойство hidesBottomBarWhenPhed по своему желанию
  2. также перед нажатием I, установив self.hidesBottomBarWhenPush, чтобы убедиться, что весь стек до следующего свойства будет иметь значение false
  3. перед выводом сообщения, вот когда я проверяю, должна ли отображаться панель вкладок, и обновляю ее шкурыBottomBarWhenPressed

Вот код для 1 и 2)

  override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    self.hidesBottomBarWhenPushed = false

    if (segue.identifier == "MyViewControllerWhoHidesTabBar") {
      let viewController: MyViewControllerWhoShowsTabBar = segue.destinationViewController as! MyViewControllerWhoShowsTabBar
      viewController.hidesBottomBarWhenPushed = true
    }
       // rest of implementation....
 }

3) Я переопределил действие кнопки возврата на

  func backButtonClick(sender:UIButton!) {
    let viewControllers = self.navigationController!.viewControllers
    if let vc = viewControllers[viewControllers.count-2] as? MyViewController {
      if vc.isKindOfPageYouDontWannaShowTheTabBar() == true {
        vc.hidesBottomBarWhenPushed = true
      }
    }
    navigationController?.popViewControllerAnimated(true)
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...