#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. не сработало, брат, я все еще ценю твое время и усилия