2016-09-29 5 views
3

Ich verwende den folgenden Code, um eine andere Ansicht programmgesteuert in swift 3 zu bekommen. Es gibt keinen Fehler beim Ausführen. Aber weiß nicht, warum es nicht zu dieser Ansicht gehtGehe zu einer anderen Ansicht programmatisch in Swift 3

Code I verwendet:

let images = self.storyboard?.instantiateViewController(withIdentifier:"Collection") as! UICollectionViewController 
      self.navigationController?.pushViewController(images, animated: true) 

ich gehe zu wollen CollectionView.swift enter image description here

enter image description here

+0

Hat Sie aktuelle Viewcontroller ein Navigation _have_? –

+0

Nein, es hat keine Navigationssteuerung –

+0

hey @GijoVarghese, es ist möglich, dass Sie einige grundlegende Container View-Probleme haben, mit zu beginnen. umreißen .. http://stackoverflow.com/a/23403979/294884 – Fattie

Antwort

6

Um zwischen View-Controller zu navigieren Sie UINavigationController verwenden.

Ich werde Ihnen ein einfaches Beispiel der Navigation geben, hoffentlich wird es Ihnen helfen, Navigation in Ihrem Projekt zu arbeiten.


Ergebnis

Viewcontroller geht um ein Bild zu DetailViewController zwischen Navigation:


Ihre Ansichten

einrichten

zunächst sicher, dass Ihr Root-Controller mit einer Navigationscontroller Steuerung eingebettet ist, so dass Sie segues mit navigieren können:

enter image description here

Ihre Ansichten in Verbindung, die die Navigation verwendet werden.

enter image description here


-Code

class ViewController: UIViewController { 

    @IBOutlet weak var imageView: UIImageView! 

    override func viewDidLoad() { 
    super.viewDidLoad() 
    } 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    // showDetail Segue 
    if segue.identifier == "showDetail" { 
     // Sending the image to DetailViewController 
     // Before appears in the screen. 
     let detailViewController = segue.destination as! DetailViewController 
     detailViewController.image = sender as? UIImage 
    } 

    } 

    @IBAction func loginButton(_ sender: AnyObject) { 

    // Go to another view controller 
    performSegue(withIdentifier: "showDetail", sender: imageView.image) 

    } 

} 

class DetailViewController: UIViewController { 
    @IBOutlet weak var imageView: UIImageView! 
    var image: UIImage? 

    override func viewDidLoad() { 
    super.viewDidLoad() 

    if let imageSent = image { 
     imageView.image = imageSent 
    } 
    } 
} 
0

Ich denke, es würde Am besten, anstatt programmatisch die Storyboard-ID des Controllers aufzurufen, stattdessen Segues zu verwenden. Sie können herausfinden, wie Sie sie verwenden here.

Aber wenn Sie zu verwenden, um die SBID haben , hier ist ein Beispiel Ausschnitt aus einem meiner Projekte ...

let vc = self.storyboard?.instantiateViewController(withIdentifier: "UpdateFilesViewController") 
self.navigationController?.present(vc!, animated: true, completion: nil) 

Beachten Sie, dass präsentieren könnte die Lösung, die Sie nach statt sind sein Drücken. Darüber hinaus scheinen Sie den UIViewController auf einen UICollectionViewController zu übertragen, was ebenfalls Probleme verursachen kann. Beachten Sie, dass ein UICollectionViewController eine Unterklasse eines UIViewController ist, sodass das Casting nicht erforderlich ist.

+0

ok. Versuchte auch das. Funktioniert nicht –

+0

Basierend auf Ihrem letzten Update scheint es, dass Sie nach einem Bezeichner mit dem Namen "CollectionOfImages" suchen, der sich noch in Ihrem Stryboard befindet. Sie sagen, er heißt "Collection". Stellen Sie sicher, dass diese übereinstimmen. –

+0

Nein, ich habe es gerade umbenannt, um es zu testen –

0

Wie wir in den Kommentaren herausgefunden haben, hat Ihr aktueller viewController keinen navigationController.

Das bedeutet, dass

self.navigationController?.pushViewController(images, animated: true) 

nichts tut. Sie müssen den ersten ViewController mit einen NavigationController einrichten, damit dieser Effekt wirksam wird.

+0

Aber ich brauche keine Navigationsleiste, um in meiner App angezeigt zu werden. Sowieso? –

+0

Nein, Sie können die Navigationsleiste ausblenden. –

+0

ok. Lassen Sie mich das versuchen –

0

Storyboard Identifier ändern

Sie müssen nur als „CollectionOfImages“ in Identität Inspektoren als Storybroad Identität Storyboard-Kennung ändern, so dass es dort zu bewegen.

Hinweis: Bitte stellen Sie sicher, dass Ihr aktueller View-Controller in den Navigationscontroller eingebettet ist. Andernfalls wird der neue Controller während der Bewegung nicht gedrückt.

0

Wenn Sie keine Navigation-Controller verwenden möchten, können Sie einfach präsentieren Sie Ihre Controller:

let images = self.storyboard?.instantiateViewController(withIdentifier:"Collection") as! UICollectionViewController 

self.present(images, animated: true, completion: nil) 
+0

Getting error: "Beenden App aufgrund der nicht abgefangenen Ausnahme 'NSInternalInconsistencyException', Grund: '- [UICollectionViewController loadView] instanziiert View-Controller mit Bezeichner" Collection "aus Storyboard" Main ", aber nicht eine UICollectionView. " –

Verwandte Themen