2016-07-30 31 views
0

Ok, lassen Sie uns zuerst ist:iOS - Schieben auf einen View-Controller, der Name Dinge nicht in der Storyboard-

ich in meinem root-View-Controller wich eine Tabellenansicht haben wir "HomeViewController" nennen. In dieser Tabellenansicht wird jeder Zellenabgriff einen anderen Ansichtscontroller drücken. Diese Sammlung von View-Controllern nennen wir "DetailViewControllers".

Ich bin mir vollkommen bewusst, dass ich dies durch einfaches Laden und Drücken jedes DetailViewControllers programmgesteuert innerhalb der didSelectRowAtIndexPath-Methode tun kann. Ich möchte etwas anderes machen, anstatt Storyboard und eine Prototyp-Zelle zu verwenden, und das gelingt mir nicht, deshalb suche ich nach einem Rat, da ich mich mit Storyboards und Abläufen nicht auskenne.

Das Verhalten, das ich hier erreichen möchte, ist: Ich habe einen Übergang von einer Prototypzelle in der Tabellenansicht in meinem HomeViewController. Dieser Abschnitt schiebt einen "Basis" -Sicht-Controller, von dem jeder DetailViewController erbt. Diesen View-Controllern ist auch kein View-Controller im Storyboard zugewiesen.

In der prepareForSegue-Methode möchte ich den 'destinationViewController' in die 'richtige' Klasse zu werfen. Die App stürzt an diesem Punkt ab und sagt "Es konnte kein Wert vom Typ 'BaseTestViewController' in 'TestViewController' umgewandelt werden." Das ist völlig verständlich.

Also, meine Frage ist: Gibt es einen Weg, um eine Überleitung so zu arbeiten?

+0

Wollen Sie sagen, dass Sie auf einen View-Controller schieben möchten, der nicht einmal im Storyboard existiert? –

+0

@JLT Ja, genau. Wäre das überhaupt möglich? – Bienemann

Antwort

0

Sie können keine Segmente programmatisch erstellen. Segues existieren nicht ohne ein Storyboard. Sie können einfach durch Laden einer NIB-Datei zu einem View-Controller wechseln.

Hier ist, wie Sie es tun.

Nehmen wir an, Sie haben eine NIB-Datei mit dem Layout der Ansicht für die Hauptansicht Ihres View-Controllers. Wir nennen es zum Beispiel "Test".

  1. Gehen Sie zu dieser NIB-Datei, klicken Sie auf den Besitzer der Datei.

  2. Ändern Sie die Klasse in den Namen Ihres View-Controllers. In meinem Fall habe ich es ViewController genannt.

enter image description here

  1. Recht auf Eigentümer der Datei klicken. Verknüpfen Sie den Ausgang der Ansicht Ihres View-Controllers mit der Ansicht in der NIB-Datei.

  2. Dann im View-Controller, wo Sie zu dieser Ansicht Controller den Übergang wollen, tun Sie es wie folgt aus:

    UIViewController * controller = [[UIViewController alloc] initWithNibName: @ "Test" Bundle: [NSBundle main ]];

    [selbst anwesendViewController: Controller animiert: ja Abschluss: Null];

Es wird die Ansicht Controller modal präsentieren.

Wenn Sie eine Navigationssteuerung einbetten, dann können Sie es wie folgt tun:

[self.navigationController pushViewController:controller animated:YES]; 

Hoffe, es hilft.

+0

Das ist eine Schande, wenn man dynamisch Segmente und Elemente im Storyboard erstellen kann, würde dies viel Flexibilität bieten. Ich weiß wie man es "normal" macht, aber danke trotzdem für das Beispiel. Ich akzeptiere deine Antwort, da du mir als Einziger sagst, dass ich keine Programmsegmente erstellen kann. – Bienemann

0

Versuchen Sie so ohne Storyboard-Überleitung.

let objDestVC = self.storyboard.instantiateViewControllerWithIdentifier("DestVCStroyboardId") as! DestinationViewController 
self.navigationController?.pushViewController(objDestVC, animated: true) 
+0

"Ich bin mir vollkommen bewusst, dass ich das schaffen kann, indem ich einfach jeden der DetailViewControllers programmatisch innerhalb der didSelectRowAtIndexPath-Methode lade und drücke. Ich möchte stattdessen etwas anderes machen (...)" "Also meine Frage ist: ist da ein Weg, um einen solchen Übergang zu schaffen? " Danke trotzdem. – Bienemann