В Swift панель навигации исчезает и никогда не возвращается

#swift #uinavigationcontroller #uinavigationbar #pushviewcontroller

#swift #uinavigationcontroller #uinavigationbar #pushviewcontroller

Вопрос:

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

Я делаю весь свой код программно без какого-либо использования конструктора интерфейса.

Я пробовал список приведенных ниже кодов, но ни один из них не работал.

   override func viewDidLoad() {
    super.viewDidLoad()
self.navigationController?.setNavigationBarHidden(false, animated: false)
    self.navigationItem.leftBarButtonItem = UIBarButtonItem(image: #imageLiteral(resourceName: "backimg"), style: .plain, target: self, action: #selector(backTapped))

    let webV:UIWebView = UIWebView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height))
    webV.loadRequest(NSURLRequest(url: NSURL(string: "https://*****************.com")! as URL) as URLRequest)
    webV.delegate = self;
    self.view.addSubview(webV)
    self.navigationController?.navigationBar.isHidden = false
    navigationController?.isNavigationBarHidden = false
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(true)
    self.navigationController?.navigationBar.isHidden = false
    self.navigationController?.setNavigationBarHidden(false, animated: false)
}
override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(true)
    self.navigationController?.navigationBar.isHidden = false
    self.navigationController?.setNavigationBarHidden(false, animated: false)
}

@objc func backTapped(_ sender: Any){
    self.dismiss(animated: true, completion: nil)

}
  

Я пытаюсь вывести контроллер представления из целевой функции кнопки следующим образом :

   @objc func parkingTimerTapped(_ sender: Any) {
    let pp = ParkingModeScheduleView()

    self.present(pp, animated: true, completion: nil)
    print("Parking Timer Tapped")
 }
  

Я также уже пытался запустить контроллер представления, используя команду ниже :

   self.navigationController?.pushViewController(pp, animated: true)
  

Я делаю что-то не так или что-то упускаю?

Комментарии:

1. вы проверили, что ваш навигационный контроллер не равен нулю?

2. я не знаю, как это проверить, но навигационный контроллер отображается на всех других экранах и контроллерах, которые я создал некоторое время назад. недавно я пришел, чтобы добавить еще один и столкнулся с этой проблемой. Если работает и отображается во всех других представлениях, то оно не может быть нулевым ?! или это возможно?

3. @WasimMalek я просто попытался распечатать его, и да, это действительно НОЛЬ. но как это возможно, если его нет на всех других контроллерах? Как я могу это исправить? Большое спасибо, что указали на это.

4. вам нужно добавить этот контроллер представления в контроллер навигации. если вы используете раскадровку, выберите view controller и встроите в navigation controller.

5. Затем вам нужно добавить свой parkingModeScheduleview в UINavigation. пусть navigation = UINavigationController(RootViewController: pp), а затем представьте навигацию вместо pp.

Ответ №1:

вам нужно добавить свой parkingModeScheduleview в контроллер UINavigation следующим образом

 @objc func parkingTimerTapped(_ sender: Any) {
    let pp = ParkingModeScheduleView()
    let navigation = UINavigationController(rootViewController: pp)
    self.present(navigation, animated: true, completion: nil)
    print("Parking Timer Tapped")
 }
  

Ответ №2:

Использование self.present(pp, animated: true, completion: nil) показывает ваш новый контроллер представления как модальный, поэтому он вообще не является частью стека навигации, и поэтому панели навигации нет.

Я бы рекомендовал попробовать, self.navigationController?.pushViewController(pp, animated: true) но сначала проверьте self.navigationController , нет ли nil по какой-либо причине. Также удалите все скрытые связанные методы панели навигации из вашего ParkingModeScheduleView

Комментарии:

1. не сработало, брат, я все еще ценю твое время и усилия