Missing TabbarVC and navigationVC swift 4.0

I have a tableViewController (lower left corner) embedded in a NavigationController and a tabBarController . Choosing a cell in tableViewController directs the user to a detailsViewVC (buttom right corner) with tabbarVC and navigationVC visible. In my MapView (right top corner) I have annotation that when pressed shows a callout. Pressing on the callOut directs the user to the same detailsView - but now the tabbarVC and the navigationVC is missing This is part of my storyboard: enter image description here

To compensate for the missing NavigationVC I have embedded my MapKit View in a NavigationVC (beside the mapKitView)- but now my code isn't working - so.. I hopeI can solve the problem by adding a NavigationVC to my tabbar-array. Here it is without the NavigationVC

class TabbarController: UITabBarController {

override func viewDidLoad() {
    super.viewDidLoad()
    let VC1 = TableViewController()
    let VC2 = DetailsViewController()
    let VC3 = ValgteKortViewController()
    let TBC = TabbarController()
    TBC.viewControllers = [VC1,VC2, VC3]

In my tableViewController I have to send values from one VC in the tabbarVC to another - and before adding the NavigationBar to my storyboard the code was working - but now I get an error

enter image description here

the error says "Could not cast value of type 'UIViewController' to 'VandreIDK.ValgteKortViewController' "

1: How do I add the navigationController in my tabBarCotroller-array

2: would that make my tabbarVC and NavigationVC visible when pressing the callOut on my annotation in MapKitView?

Help would be very appreciated :)

EDIT: (code for ValgteKortVC

import UIKit
import MapKit

class ValgteKortViewController: UIViewController {

var locationManager = LocationManager.shared
//var location: CLLocation!
var SelectedVandreturInAnnotation: MKPointAnnotation?

var vandreturList = [Vandretur]()
let annotation = MKPointAnnotation()
var annotations = [MKPointAnnotation()]
var selectedVandreturInAnnotation:Vandretur?


@IBOutlet weak var map: MKMapView!
@IBOutlet weak var activityIndicator: UIActivityIndicatorView!


override func viewDidLoad() {
    super.viewDidLoad()
    self.title = "Kort"
    map.delegate = self

    settingUpActivityIndicator()


}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func settingUpActivityIndicator(){
    activityIndicator.center = self.view.center
    activityIndicator.hidesWhenStopped = true
    activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray
    activityIndicator.startAnimating()
    view.addSubview(activityIndicator)
}

/**
 bruger denne her i stedet for viewDidLoad, da man kan køre frem og tilbage mellem TableViewController og denne
 VC -  flere gange.
 Her itererer jeg igennem alle de vandreture der er valgt. Kalder setAnnotations, for at gemme de annotations der
 kommer frem i det første loop - da de ellers blever slettet. På denne måde svare mine annotations til de objekter der er i
 tableViewController
 */
override func viewDidAppear(_ animated: Bool) {
    print("filteredVandreture.count:  \(vandreturList.count)")
    for vandreture in vandreturList{

        let navn = vandreture.navn
        let by = vandreture.by
        let afstand = vandreture.afstand
        let længde = vandreture.længde
        let type = vandreture.type
        let latitude = vandreture.coordinate.latitude
        let longitude = vandreture.coordinate.longitude

        let coordinate = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
        let annotation = MKPointAnnotation()
        annotation.title = navn
        annotation.subtitle = by
        annotation.coordinate = coordinate

        setAnnotations(annotation: annotation)

    }
    map.showAnnotations(map.annotations, animated: true)
    activityIndicator.stopAnimating()
}
override func viewDidDisappear(_ animated: Bool) {
    vandreturList.removeAll()
    map.removeAnnotations(annotations)
}
// kaldes for at der er overensstemmelse mellem tableViewController og Denne VC
func setAnnotations(annotation: MKPointAnnotation){
    annotations.append(annotation)
    self.map.addAnnotation(annotation)
}

/**
 Denne metode kaldes når en annotation bliver trykket på
 */
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
    print("Annotation selected")


    if let annotation = view.annotation as? MKPointAnnotation {
        print("Your annotation title: \(annotation.title)");
        print("Your annotation subtitle: \(annotation.subtitle)");
    }
}

//Denne metode laver callback button i annotation, og laver det til en pinAnnotation, da den ellers er
//orange og større
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    if !(annotation is MKUserLocation) {
        let pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: String(annotation.hash))

        let rightButton = UIButton(type: .detailDisclosure)
        rightButton.tag = annotation.hash

        pinView.animatesDrop = true
        pinView.canShowCallout = true
        pinView.rightCalloutAccessoryView = rightButton

        return pinView
    }
    else {
        return nil
    }
}


//    Denne metode kaldes når brugeren trykker på callout knappen. I denne metode tager man det vandretur-objekt
//    som hænger sammen med denne annotation,og launcher Map appen, ved at lave et associeret MKMapItem og kalder
//    openInMaps (launchOptions) på dettemap-objekt.
//    Læg mærke til at man har dictionar, så man kan specificere nogle forskellige muligheder. Her er DirectionModeKey
//    sat til driving

func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
    if control == view.rightCalloutAccessoryView {
        let pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: String(annotation.hash))

        let rightButton = UIButton(type: .detailDisclosure)
        rightButton.tag = annotation.hash

        pinView.animatesDrop = true
        pinView.canShowCallout = true
        pinView.rightCalloutAccessoryView = rightButton
        if let annotation = view.annotation as? MKPointAnnotation {
            print("Your annotation title: \(annotation.title)");
            print("Your annotation subtitle: \(annotation.subtitle)");
            for vandreture in vandreturList{
                if (annotation.title == vandreture.navn && annotation.subtitle == vandreture.by){
                    selectedVandreturInAnnotation = vandreture
                    print(selectedVandreturInAnnotation?.længde)
                    self.performSegue(withIdentifier: "annotationSegue", sender: view)
                    //    return
                }
            }
        }

        print("ser om vi kommer hertil når vi trykker på callout ")
    }
    //   location.mapItem().openInMaps(launchOptions: launchOptions)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == "annotationSegue" {
        let backItem = UIBarButtonItem()
        backItem.title = "Søg"
    //    navigationController?.setNavigationBarHidden(false, animated: false)
    //    navigationItem.backBarButtonItem = backItem // This will show in the next view controller
        let destinationController = segue.destination as! DetailsViewController
        destinationController.vandretur =  selectedVandreturInAnnotation!//sender as! MKPinAnnotationView

    }

  }
}

extension ValgteKortViewController: MKMapViewDelegate{


}