2016-10-25 3 views
-1

Ich habe begonnen, Ios zu lernen. Ich komme aus einem Webentwicklungshintergrund.IOS richtige Verwendung verwenden

Ich bin ein wenig verwirrt, wenn ich den Übergang vom ViewController oder von einer bestimmten Taste verwende.

Zum Beispiel: wenn ich eine HomeViewController habe, dann habe ich eine Schaltfläche "Bedingungen akzeptieren", wenn ich es antippen, Es wird mich zu TermsViewController bringen. Soll ich den Abschnitt über die Schaltfläche "Bedingungen akzeptieren" erstellen oder den gesamten ViewController auswählen (über die obere Leiste)? Welche sind die Unterschiede?

Vielen Dank im Voraus

+1

Hallo, Sie sollten genauer mit Ihrer Frage sein. Außerdem stellen Sie mehrere Fragen in einem, ist es besser, eine Frage spezifisch zu sein und Details darüber zu geben, damit Leute mit mehr Informationen sind, um Ihnen zu helfen. –

+0

Dank @MagoNicolasPalacios Ich werde versuchen, genauer zu sein – Eduardo

Antwort

2

Ich neige dazu, einen Übergang von der View-Controller selbst zu erstellen.

Sie würden dann eine IBAction für die Schaltfläche auf den View-Controller erstellen, und haben die Aktion Anruf [self performSegueWithIdentifier:@"identifier"];

Dies ist mehr oder weniger genau das, was den Übergang von einem Knopf macht zu schaffen. Wenn das alles 100% ist, was Sie tun müssen, ist das vollkommen akzeptabel. Dies ist jedoch eine wartungsfreundlichere Lösung, da Sie auf einfache Weise zusätzliche Funktionen zu Schaltflächen hinzufügen können. D. h., Ihre Schaltfläche erfordert, dass Sie ein Objekt auf einem Server speichern. Sie möchten dieses Objekt speichern, bevor Sie sich von der Seite entfernen, sodass Sie den Aufruf performSegueWithIdentifier in den Abschlussblock des Speicherns einfügen.

Darüber hinaus können Sie das Segment aus dem Storyboard mit einem Bezeichner erstellen, um dieses Segment für mehrere Schaltflächen zu verwenden. Angenommen, Sie haben einen View-Controller mit 4 Schaltflächen, die alle auf eine Informationsseite für diese Schaltfläche gehen. Sie benötigen nur einen "goToInfo" -Überblick auf Ihrem Storyboard, aber Sie können 4 einzelne IBActions für die Schaltflächen einrichten, die andere Einstellungen vornehmen, und dann den View-Controller basierend auf den in den IBActions für die Schaltflächen erstellten Daten vorbereiten. Dadurch bleibt Ihr Storyboard ein wenig sauberer, denn anstatt 4 verschiedene Segmente zu benötigen, die alle auf dem SB sichtbar sind, haben Sie nur die 1.

tl; dr - das Erstellen des Segments von der Schaltfläche ist in Ordnung solange ist 100% das einzige, was Sie tun müssen, wenn Sie den Knopf drücken. Wenn noch etwas im Hintergrund passieren muss, ist es besser, das Segment vom VC zu erstellen und es über seinen Bezeichner aufzurufen, nachdem Sie die zusätzlichen Schritte ausgeführt haben.

Edit - Ich nehme an, ich habe dich leicht in die Irre geführt. Eine Sache, die Sie tun könnten, ist die Methode -(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender zu überschreiben. Sie richten eine if/else if-Kettenüberprüfung ein, um festzustellen, ob segue.identifier den Zeichenfolgen entspricht, für die Sie den Bezeichner festgelegt haben, und Sie können verschiedene Logik innerhalb dieser Blöcke ausführen, die auch dann aufgerufen werden, wenn Sie das Segment direkt an die Schaltfläche anhängen . Das einzige Problem dabei ist, dass es sich um eine Void-Funktion handelt, und das Segment wird danach ausgeführt, ungeachtet der Probleme, die Sie bei den auf der Seite eingegebenen Daten feststellen können.

Jetzt überschreibe ich normalerweise diese Methode sowieso, so dass ich Daten zwischen VCs weitergeben kann. Hier würden Sie die Eigenschaften von segue.destinationViewController festlegen, nachdem Sie sie in die ViewController-Klasse umgewandelt haben, die Sie kennen. Ich würde hier keine Heavy-Lifting-Logik setzen, und ganz sicher keine Server-Anrufe.Das sind Fälle, in denen Sie definitiv eine IBAction über die Schaltfläche einrichten möchten, die den Logik-/Serveraufruf ausführt, und performSegue aufruft, wenn Sie fertig sind und wissen, dass alles ordnungsgemäß funktioniert hat.

1

von Taste

Es wird die Segue nennen Sie es zugewiesen haben.

aus der Viewcontroller

MÜSSEN Sie performSegue(withIdentifier: String, sender: Any?) selbst nennen

+0

Hallo @Honey, danke für Ihre Antwort. Noch eine Sache, kann ich das Segment von jedem ViewController oder nur von 2 aufrufen, die verwandt sind? – Eduardo

+0

@Eduardo EVERY Segue, das Sie im Storyboard erstellen, hat einen 'destinationViewcontroller' und einen' sourceViewcontroller'. Also bist du nur an sie gebunden. Wenn Sie in der Lage sein möchten, in einen anderen viewController unterwegs zu wechseln, dann müssen Sie es programmatisch tun, ohne segues zu verwenden und 'showViewcontroller' oder 'presentViewController' zu verwenden – Honey

+0

@Eduardo' performSegueWithIdentifier' ist eine Instanzmethode, im Gegensatz zu einer Klassenmethode . Es wird nach einem Segment mit der Kennung gesucht, die von dem View Controller stammt, auf dem Sie es aufrufen. Es handelt sich nicht um ein Segment im Storyboard. –

Verwandte Themen