Ich habe 2 View-Controller, die ich mit jeder mit einer eigenen Klasse arbeiten. In einer der Klassen gibt es eine Funktion, die unter anderem verschiedene Ansichten (wechselnde Farben von Schaltflächen usw.) in diesem Ansichtscontroller verändert. In der zweiten Ansicht Controller muss ich eine Funktion machen, die ihre eigene Sache innerhalb dieser View-Controller macht sowie die andere Funktion aufrufen, um die Ansichten in der ersten View-Controller anzupassen. Wie richte ich das Protokoll ein und delegiere dies um dies zu erreichen?mit Delegaten in Xcode, um Funktionen auszuführen
Antwort
Ich denke, das ist keine sehr gute Architektur. Warum einen View Controller ändern, der nicht einmal sichtbar ist?
Denken Sie stattdessen daran, was Sie über das MVC-Modell (Model-View-Controller) gelernt haben. Sie müssen den Zustand eines View-Controllers in ein Modell abstrahieren, und jeder View-Controller ist selbst dafür verantwortlich, diese Daten auf seine eigene Weise anzuzeigen.
Nehmen wir zum Beispiel an, Sie möchten einen "Status" anzeigen, und wenn es "kritisch" ist, sollte die Farbe in einem Controller rot sein, der andere Controller sollte nur das Wort "kritisch" anzeigen. Beide Controller können diesen Status ändern. In diesem Fall benötigen Sie eine Variable, die den Status enthält, und beide Controller können darauf zugreifen und sie ändern.
(. Sie können mit einer globalen Variablen starten, aber nicht bekommen, in die Gewohnheit Globals verwenden Später können Sie erforschen, wie zB ein Singleton-Muster zu verwenden.)
Wenn ich Sie richtig verstehe: Sie haben VC1 (View Controller 1), der VC2 darstellt. Wenn VC2 aktiv ist, kann es in einem Zustand sein (oder auf eine Interaktion reagieren), dass es eine Funktion innerhalb von VC1 ausführen muss.
{Beispiel davon ausgehen, dass keine Informationen zurückgesendet werden müssen. Wenn Informationen dann benötigt wird, ändern changedStateFrom
Funktion
protocol ChangeStateDelegate {
func changedStateFrom(_ viewController: UIViewController)
}
class VC1: UIViewController, ChangedStateDelegate {
// Here is where you present VC2
let vc = VC2()
let vc.delegate = self
// ChangedStateDelegate
func changedStateFrom(_ viewController: UIViewController){
// call whatever function in VC1 you need
}
}
class VC2: UIViewController {
var delegate: ChangedStateDelegate?
func foo(){
// Where ever VC2 reacts to a state change and needs to inform VC1, execute this
self.delegate?.changedStateFrom(self)
}
}
- 1. Randomly Aufruf von Funktionen auszuführen
- 2. Erstellen und installieren, ohne in Xcode auszuführen
- 3. Func/Action Delegaten mit Referenzargumente/Parameter oder anonyme Funktionen
- 4. Übergeben Sie Delegaten an externe C-Funktionen in D
- 5. Berechtigungen aus Xcode-Funktionen extrahieren
- 6. Refactoring mit Lambda's und Delegaten
- 7. Problem mit Delegaten in C#
- 8. Xcode Instruments kann den Aufbewahrungszyklus für starke Delegaten nicht erkennen?
- 9. Need Funktion auszuführen, wenn forEach Funktionen
- 10. Funktion mit Iteratoren, um eine Objektoperation auszuführen
- 11. Python: Mit sympy.sympify einen sicheren eval() auf mathematischen Funktionen auszuführen
- 12. Wie Unterklasse UITableView mit Delegaten?
- 13. Lokale Variablen mit Delegaten
- 14. XCode: Ich kann den Delegaten eines TableView (IB oder programmgesteuert)
- 15. Xcode Spielplatz nicht Funktionen ausführt
- 16. Speichermethoden um alle nacheinander auszuführen
- 17. Wie kann ich Python-Funktionen mit C++ in Xcode aufrufen?
- 18. Verwenden von Delegaten mit Ereignissen
- 19. Java ScheduledExecutorService, um regelmäßig auszuführen
- 20. Delegaten in Python
- 21. Wie kann die OnClientClick-Eigenschaft von Button verwendet werden, um mehrere JavaScript-Funktionen in ASP.NET auszuführen?
- 22. Was ist der richtige Weg, um einen Delegaten abzuleiten?
- 23. mit Laufzeit.exec() in Java-Sprache, um eine C-Datei auszuführen
- 24. dynamische qtreeview mit benutzerdefinierten Delegaten
- 25. Implementieren eines Delegaten mit einem benannten Parameter
- 26. Schaltfläche Bildschirmwechsel in Android Mono mit Delegaten
- 27. Wie Funktionen von Command Line in Knoten Modul auszuführen
- 28. Verwenden Sie Xcode, um das von Swift Package Manager erstellte Projekt auszuführen.
- 29. Prädikat Delegaten in C#
- 30. Funktionszeiger/Delegaten in Java?
, da die Funktion in der zweiten View-Controller ein „log-out“ ist, und es muss aktiv Dinge in der App schließen – Sudacris
Hier ist eine gute Übersicht eine einfache Singleton zu schaffen Klasse. https://krakendev.io/blog/the-right-way-to-write-a-singleton – Adrian