Панель навигации только в одном представлении во всем моем приложении - PullRequest
0 голосов
/ 05 декабря 2018

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

override func viewWillAppear(_ animated: Bool) {
    self.navigationController?.setNavigationBarHidden(true, animated: animated)
    super.viewWillAppear(animated)
}

override func viewWillDisappear(_ animated: Bool) {
    self.navigationController?.setNavigationBarHidden(false, animated: animated)
    super.viewWillDisappear(animated)
}

Работало нормально - однако приложение стало более сложным - у меня есть эти представления

lazy var orderedViewControllers: [UIViewController] = {
    return [self.newVc(viewController: "pageOne"),
            self.newVc(viewController: "pageTwo"),
            self.newVc(viewController: "pageThree"),
            self.newVc(viewController: "pageFour"),
            self.newVc(viewController: "activate")
    ]
}()

Где этот код не применяется, дажеесли я создаю собственный контроллер представления для каждого представления.

Я думал, что способ сделать это будет поместить верхний кусок кода в каждом представлении, но это не работает для нижнего фрагмента.По сути, мой вопрос заключается в том, как использовать NavigationController для создания бара ТОЛЬКО на одном view.

Ответы [ 3 ]

0 голосов
/ 05 декабря 2018

Вы можете использовать этот метод UINavigationControllerDelegate

optional func navigationController(_ navigationController: UINavigationController, 
                          willShow viewController: UIViewController, 
                          animated: Bool){
     if viewController == self."desired view controller" {
        self.isNavigationBarHidden = true
    }else{
        self.isNavigationBarHidden = false 
    }
}
0 голосов
/ 05 декабря 2018

Спасибо всем за поддержку.Я решил свою проблему, выполнив следующие действия:

  1. Я поместил единственный контроллер представления, который хотел, чтобы панель навигации была в контроллере навигации, просмотрите меню Вставить.
  2. Я добавилПользовательская кнопка возврата.
0 голосов
/ 05 декабря 2018

Один вариант: используйте класс «base view controller», который обрабатывает скрытие / отображение панели навигации, и сделайте ваши «страницы» подклассами «базового» класса.

import UIKit

class BaseViewController: UIViewController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.navigationController?.setNavigationBarHidden(true, animated: animated)
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        self.navigationController?.setNavigationBarHidden(false, animated: animated)
    }

}

class ViewController: UIViewController {

    // has buttons with
    //    Show (e.g. push)
    // segues to Settings, First, Second, Third view controllers

}

class SettingsViewController: UIViewController {

    // Settings VC is a normal UIViewController, because
    // we *want* the NavBar to remain visible

}

class FirstViewController: BaseViewController {
    @IBAction func backTapped(_ sender: Any) {
        self.navigationController?.popViewController(animated: true)
    }
}

class SecondViewController: BaseViewController {
    @IBAction func backTapped(_ sender: Any) {
        self.navigationController?.popViewController(animated: true)
    }
}

class ThirdViewController: BaseViewController {
    @IBAction func backTapped(_ sender: Any) {
        self.navigationController?.popViewController(animated: true)
    }
}
...