Я пытаюсь нажать новый контроллер представления из текущего контроллера нажатием кнопки. Но как только новый контроллер представлен, панель навигации сверху исчезает, и я пробовал множество способов, но, похоже, просто не могу вернуть ее.
Я делаю весь свой код программно без использования Interface Builder.
Я пробовал список приведенных ниже кодов, но ни один из них не работал.
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)
Я что-то делаю не так или что-то упускаю?
я не знаю, как это проверить, но навигационный контроллер отображается на всех других экранах и контроллерах, которые я сделал некоторое время назад. недавно я пришел добавить еще один и столкнулся с этой проблемой. Если он работает и показывается на всех других видах, то он не может быть нулевым?! или может?
@WasimMalek, я только что попытался его распечатать, и да, это действительно NIL. но как это возможно, если его нет на всех других контроллерах? Как я могу это исправить? Большое спасибо, что указали на это.
вам нужно добавить этот контроллер представления в контроллер навигации. если вы используете раскадровку, выберите контроллер представления и вставьте его в контроллер навигации.
нет, я не использую раскадровку
Затем вам нужно добавить свое представлениеparkingModeScheduleview в UINavigation. let navigation = UINavigationController(rootViewController: pp), а затем представить навигацию вместо pp.
это сработало, я не могу поверить, что это было так просто. Большое спасибо, приятель, я ценю это. Опубликуйте свой комментарий как ответ, чтобы я мог принять его <3 <3
Использование self.present(pp, animated: true, completion: nil)
показывает ваш новый контроллер представления как модальный, поэтому он вообще не является частью стека навигации, и поэтому панели навигации нет.
Я бы порекомендовал попробовать с self.navigationController?.pushViewController(pp, animated: true)
, но сначала проверьте, не является ли self.navigationController
nil
по какой-то причине. Также удалите все скрытые связанные методы панели навигации из вашего ParkingModeScheduleView
не получилось, брат, я все еще ценю твое время и усилия
вам нужно добавить свой parkModeScheduleview в контроллер 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")
}
Вы проверили, что ваш навигационный контроллер не равен нулю?