2016-02-16 4 views
4

Ответ: Использовать self.tabBarController? .tabBar.hidden вместо hidesBottomBarWhenPushed в каждом контроллере представления для управления тем, должен ли контроллер представления показывать панель вкладок или нет.скрыть/показать панель вкладок при нажатии/назад. swift

override func viewWillAppear(animated: Bool) { 
    self.tabBarController?.tabBar.hidden = true/false 
} 

Хочу

вида Контроллер 1: панель вкладок должна быть показана

вид контроллера 2: панель вкладок должна быть показана

вида контроллер 3: панель вкладок следует не показывать.

контроллер 4: панель вкладок не должна отображаться.

Я написал

// prepareForSegue in view controller 1, 
    let upcoming = segue.destinationViewController as! viewcontroller3 
    upcoming.hidesBottomBarWhenPushed = true 

// in view controller 3, 
    func clickOnButton(button: UIButton) { 
     self.hidesBottomBarWhenPushed = false 
     self.performSegueWithIdentifier("viewController2", sender: self) 
     self.hidesBottomBarWhenPushed = true 
    } 
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "viewController2" { 
      let upcoming = segue.destinationViewController as! viewController2 
      upcoming.hidesBottomBarWhenPushed = false 
     } 
    } 
// prepareForSegue in view controller 2 
    let upcoming = segue.destinationViewController as! viewController4 
    upcoming.hidesBottomBarWhenPushed = true 

если 1 -> 3, то обратно к 1, работает.

если 1 -> 3 -> 2, то обратно на 3 и обратно на 1, работает.

если 2 -> 4, а затем 2, работает.

если 1 -> 3 -> 2 -> 4, а затем назад на 2, панель вкладок не отображается. Интересно, почему. Любые предложения или некоторые объяснения hidesBottomBarWhenPushed как это сбивает с толку меня много

enter image description here

+0

Вы видели нижний планшет, когда вы навигация от 3 до 2? –

+0

Да. Я это вижу. –

ответ

16

Как это имя предположить, hiddenBottomBarWhenPushed только скрыть нижнюю панель, если это необходимо, он не будет UNHIDE bottomBar. Вы можете сделать это, чтобы получить это работает:

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 
    self.tabBarController?.tabBar.hidden = true/false 
} 

или просто положить self.tabBarController?.tabBar.hidden = true/false в prepareForSegue

Но я бы не рекомендовал вам сделать это, так как это было бы странно, если бы bottomBar вдруг выскочил, пользователь подумают, что они внезапно вернутся к rootViewController, пока они не являются.

Пользователи должны всегда знать, где они находятся в вашем приложении, и как добраться до следующего пункта назначения.

+0

Если я делаю это в viewWillAppear, я не видел всплывающее окно. Но, если я это сделаю в viewDidAppear, я вижу всплывающее окно. Причина, по которой я хочу скрыть панель вкладок в 3 и 4, состоит в том, что 3 - от 1 до 1 чата, а 4 - групповой чат. И я вычеркиваю все hidesBottomBarWhenPushed и использую tabBar.hidden в viewWillAppear в каждом контроллере представления. –

+0

Скрытие панели вкладок в 3 и 4 является нормальным поведением, но если вы собираетесь навигация с 3 на 2, может оказаться неуместным показывать панель вкладок. BTW, если вы используете tabBar.скрытый в viewWillAppear из 2, вы можете не видеть tabBar, если нажать tabBarItem напрямую, поэтому лучше поместить его в prepareForSegue из 3. –

1

Добавьте эту реализацию в ViewController, которую вы хотите скрыть/показать вкладку на нажатой/выскоченной. он также будет работать для всех последующих точечных контроллеров.

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
    if wilmove { 
     hidesBottomBarWhenPushed = true 
    } 
    wilmove = false 
} 

override func viewWillDisappear(_ animated: Bool) { 
super.viewWillDisappear(animated) 
if wilmove { 
     hidesBottomBarWhenPushed = false 
    } 
    wilmove = false 
} 

var wilmove = false 
override func willMove(toParentViewController parent: UIViewController?) { 
    super.willMove(toParentViewController: parent) 
    wilmove = true 
    if !isViewLoaded { 
     hidesBottomBarWhenPushed = true 
    } 
} 
Смежные вопросы