Ich versuche, auf eine Schaltfläche (die im Code erstellt wurde) zu klicken und einen anderen Ansichtscontroller aufzurufen und dann eine Funktion im neuen Ansichtscontroller ausführen zu lassen.
Ich weiß, dass dies in IB relativ einfach möglich ist, aber das ist keine Option.
Ein Beispiel für das, was ich tun möchte, wäre, wenn Sie zwei Ansichts-Controller hätten, einen mit einem Begrüßungsbildschirm des Hauses. Der andere View Controller hatte einen Spaziergang durch das Haus, so dass Sie alle Räume in einer festgelegten Reihenfolge durchgehen konnten. Der Begrüßungsbildschirm verfügt über Schaltflächen für jeden Raum, mit denen Sie zu einem beliebigen Punkt auf dem Durchgang springen können.
quelle
Und wenn sich jemand fragt, wie das geht
swift
:quelle
nil
? Ist das nicht eine App IMMER ein AppDelegate?!sharedApplication()
sollte durch ersetzt werdenshared
. dh "Anwendung" und die Klammern entfernen. Der vollständigeif let myDelegate = UIApplication.shared.delegate as? AppDelegate { myDelegate.someMethod() }
Klingt so, als ob Sie nur ein
UINavigationController
Setup benötigen ?Sie können das
AppDelegate
überall im Programm über bekommenIn Ihrem App-Delegaten sollte Ihr Navigationscontroller entweder über IB oder im Code eingerichtet sein.
Unter der Annahme, dass Sie Ihren Viewcontroller "Hausübersicht" bereits erstellt haben, wäre dies im Code in Ihrem
AppDelegate
didFinishLaunchingWithOptions
...Danach benötigen Sie nur noch einen Viewcontroller pro 'Raum' und rufen Folgendes auf, wenn ein Ereignis mit Schaltflächenklick erfasst wird ...
Ich habe den obigen Code nicht getestet, also verzeihen Sie Syntaxfehler, aber ich hoffe, der Pseudocode ist hilfreich ...
quelle
So mache ich es.
Vergessen Sie nicht zu importieren.
quelle
Befolgen Sie einfach diese Schritte
1. Importieren Sie Ihren App-Delegaten in Ihre Klasse, in die Sie ein App-Delegat-Objekt möchten.
2. Erstellen Sie innerhalb Ihrer Klasse eine Instanz Ihres App-Delegatenobjekts (im Grunde genommen ein Singleton).
3. Rufen Sie jetzt die Methode mit dem Selektor auf
oder direkt von
für schnell
Ich werde den ersten empfehlen. Laufen und gehen.
quelle
Sie müssen Ihre AppDelegate.h nicht überall einfügen. Es ist eine einfache Besetzung, die einen langen Weg zurücklegt und es ermöglicht, unabhängige Controller zu entwickeln und an anderer Stelle wiederzuverwenden, ohne sich um den Klassennamen usw. kümmern zu müssen ...
Genießen
quelle
Viele gute Antworten wurden bereits hinzugefügt. Obwohl ich etwas hinzufügen möchte, das mir die meiste Zeit passt.
und das ist es. Verwenden Sie es während der gesamten Anwendung wie eine Konstante.
z.B
Vergessen Sie nicht, yourAppDelegate.h in die entsprechende .pch- oder Makrodatei zu importieren.
quelle
Wenn jemand dasselbe in Xamarin (Xamarin.ios / Monotouch) benötigt, hat dies für mich funktioniert:
(Benötigen mit UIKit;)
quelle
Und falls Sie von einem View-Controller unter watchOS Zugriff auf Ihren WatchKit-Erweiterungsdelegierten benötigen:
quelle
Update für Swift 3.0 und höher
Rufen Sie die obige Methode von Ihrem Controller aus wie folgt auf
Ausgabe:
quelle
Sie können hinzufügen ,
#define uAppDelegate (AppDelegate *)[[UIApplication sharedApplication] delegate]
in Ihrem Projekt -Prefix.pch
Datei und dann jede Methode des AnrufAppDelegate
in jedemUIViewController
mit dem folgenden Code ein .quelle
Auch wenn technisch machbar, ist dies kein guter Ansatz. Wenn Sie sagen: "Der Begrüßungsbildschirm verfügt über Schaltflächen für jeden Raum, mit denen Sie zu einem beliebigen Punkt auf dem Durchgang springen können." Sie möchten also appdelegate durchlaufen, um diese Controller über tohc-Ereignisse auf Schaltflächen aufzurufen?
Dieser Ansatz entspricht nicht den Apple-Richtlinien und weist viele Nachteile auf.
quelle
Im Jahr 2020 iOS13, xCode 11.3. Was für Objective-C funktioniert, ist:
#import "AppDelegate.h"
Es funktioniert für mich, ich hoffe das gleiche für Sie! : D.
quelle