У меня есть UIViewController
, который реализует MGLMapViewDelegate
.Я пытаюсь разместить навигационную панель вверху с двумя кнопками.
Мне не удалось увидеть мои кнопки или навигационную панель, поэтому я попытался использовать функцию view.bringSubviewToFront()
в моем viewDidLoadFunction()
, как это предлагается в этом сообщении
Когда ясделал это, я получил ошибку
Ошибка: поток 1: фатальная ошибка: неожиданно обнаружил ноль при развертывании Необязательное значение
Я не понимаю, как IBOutlet
переменные могут быть нулевыми, я думал, что они были назначены кнопкам раскадровки
Мой класс ViewController (по крайней мере те части, которые я считаю важными)
class ViewController: UIViewController, MGLMapViewDelegate {
...
var mapView: MGLMapView?
@IBOutlet var navBar: UINavigationBar!
@IBOutlet var signOutButton: UIButton!
@IBOutlet var newPostButton: UIButton!
...
override func viewDidLoad() {
super.viewDidLoad()
self.mapView = MGLMapView(frame: view.bounds, styleURL: MGLStyle.lightStyleURL)
...
view.addSubview(self.mapView!)
view.addSubview(navBar)
view.addSubview(signOutButton)
view.addSubview(newPostButton)
//Make the navBar and Buttons visible
view.bringSubviewToFront(self.navBar)
view.bringSubviewToFront(self.signOutButton)
view.bringSubviewToFront(self.newPostButton)
...
}
...
@objc func handleLogout() {
let loginController = SignInViewController()
do {
try Auth.auth().signOut()
} catch let logoutError {
print(logoutError)
}
present(loginController, animated: true, completion: nil)
}
}
Некоторые скриншоты моей раскадровки, которые я считаю важными
Я пытался разместить это в моем контроллере представления сразу после super.viewDidLoad ()
self.storyboard?.instantiateViewController(withIdentifier: "mainViewController") as! ViewController
Я пытался перенести вид на передний план карты вместо основного вида
self.mapView.bringViewToFront(navBar)
Я пытался разместитькод внутри функций, таких как awakeFromNib и viewDidLayoutSubviews
override func awakeFromNib() {
super.awakeFromNib()
//Make the navBar and Buttons visible
self.mapView!.bringSubviewToFront(self.navBar)
self.mapView!.bringSubviewToFront(self.signOutButton)
self.mapView!.bringSubviewToFront(self.newPostButton)
}