2017-02-18 3 views
2

Um dies zu vereinfachen, kann ich aufgrund des App-Designs keinen eingebetteten Navigationscontroller verwenden und stattdessen eine manuelle Zurück-Schaltfläche auf dem Ansichtscontroller verwenden, um zum vorherigen zurückzukehren. Soweit ich weiß, drücken die vorherigen View-Controller dieses auch programmatisch an. Also habe ich hier einen großartigen Code für einen Button zu vielen verschiedenen Fragen gefunden, und ich habe ihn für diese App geschrieben. Problem ist, wenn ich das Programm starte, wird das Bar Button Item, das ich erstellt habe, nicht angezeigt. Der Code zeigt keine Fehler und ich bin verwirrt, warum nichts auftaucht. Ich werde Bilder und den Code einfügen, um dies so klar wie möglich zu machen. Wie immer vielen Dank für jede Hilfe, die Sie zur Verfügung stellen können !!!Programmatisch erstellte Schaltfläche "Zurück" wird nicht in der Navigationsleiste angezeigt?

Kode:

@IBOutlet weak var roomImage: UIImageView! 
@IBOutlet weak var locationLabel: UILabel! 
@IBOutlet weak var roomName: UINavigationItem! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Back Button Code 

    let backButton = UIBarButtonItem(title:"Back",style: UIBarButtonItemStyle.plain, target: self, action: #selector(DetailView.back(sender:))) 
    self.navigationItem.leftBarButtonItem = backButton 

    navigationItem.rightBarButtonItem = backButton 
    navigationItem.hidesBackButton = false 

    // Hide da tab bar 

    self.tabBarController?.tabBar.isHidden = true 

    // Do any additional setup after loading the view. 


    // Enter data from other view controllers 

    //roomName.title = stringPassed 
    roomImage.image = imagePassed 
    locationLabel.text = locationPassed 

} 

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

/* 
// MARK: - Navigation 

// In a storyboard-based application, you will often want to do a little preparation before navigation 
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    // Get the new view controller using segue.destinationViewController. 
    // Pass the selected object to the new view controller. 
} 
*/ 

// Back Button Action 

func back(sender: UIBarButtonItem) { 

    if let navigationController = self.navigationController { 

     navigationController.popViewController(animated: true) 

    } 
} 

}

Actual Storyboard mit Navigationsleiste

Wenn die App ausgeführt wird

Könnte es sein, dass ich etwas nicht zu einer Steckdose oder etwas in der Art gemacht habe? Vielen Dank!!

Storyboard-Layout

Baum Modell Detailansicht (die mit der Navigationsleiste Ausgabe)

EDIT: Immer noch nicht funktioniert, aber die Links und Ideen, die Sie gaben haben mir viele neue Ideen und Optionen gegeben, die ich erforschen kann, bis sich eine konkretere Antwort ergibt. Vielen Dank!!!

+0

Ich hätte diesen Weg nicht bevorzugt. Warum kann ein navigationController nicht verwendet werden? –

+0

Wenn ich Navigationssteuerungen verwenden würde, würde es 3 statt einer nehmen, weil 3 verschiedene View-Controller zu dieser einzigen Ansicht drängen. Alle wurzeln in einer Tab-Ansicht. Wenn du denkst, dass es einen leichteren Weg gibt, bin ich ganz Ohr. –

+0

@Frank_Cerny Können Sie Ihre Storyboardstruktur zeigen? Haben Sie NavigationItem hinzugefügt, indem Sie von den Steuerelementen zu ViewController gezogen haben? –

Antwort

1

Entfernen Sie die NavigationBar, die Sie ziehen haben aus den Kontrollen Bedienfeld Bibliothek auf Ihre ViewController. Wenn Sie navigationItem unter Verwendung self.navigationItem festlegen, verweist es nicht auf navigationBar Element, da es keine Verbindung mit es hat.

Wenn Sie schieben Sie Ihre ViewControllernavigationController?.pushViewController(myVC, animated: true) mit automatisch NavigationBar auf dem myVC Bildschirm angezeigt.

+0

Ich habe getan, was Sie gesagt haben, und die Schaltfläche wird nur angezeigt, wenn ich die Push-Ansicht verwende und die Navigationsleiste im Navigationscontroller angezeigt wird. Für die anderen 2 Ansichten, die nicht im Navigationscontroller verankert sind, gibt es noch keine Zurück-Schaltfläche. Ihre Antwort macht viel Sinn und ich versuche alles, was ich kann, um das zu erreichen. Auch wenn ich die Navigationsleiste ausschalte, wenn die in ihr verwurzelte Einzelansicht in die Detailansicht übergeht, passiert nichts wie gewöhnlich. –

+0

@Frank_Cerny Wenn Sie den navigationController verlieren, wird die Navigationsleiste nicht angezeigt. –

+0

Der springende Punkt ist, einen Zurück-Button zu erstellen, der für Ansichten funktioniert, die nicht im Navigations-Controller verankert sind. Ich kann den ganzen Tag Schaltflächen mit View-Controllern erstellen, aber diese Implementierung funktioniert nicht für dieses Problem. Deine Antwort funktionierte nur für den Navigationscontroller, der leider nicht das Problem war. –

0

Können Sie zeigen, wie Sie mit DetialView Controller-Push hat ich müde programmatisch wie diese

func showDetialViewController(){ 
let detialViewController = UIViewConroller() 
navigationController?.pushViewController(detialViewController, animated: true) 
} 
+0

Die Antworten sollen die Frage beantworten, um keine weiteren Fragen zu stellen. – Adeel

+0

Ein View-Controller drückt wie Sie sagten und die anderen 2 zeigen, überprüfen Sie den obigen Kommentar. –

Verwandte Themen