pattern - iOS-Aufruf der App Delegate-Methode von ViewController




uinavigationcontroller (8)

Auch wenn technisch machbar, ist das kein guter Ansatz. Wenn du sagst: "Der Begrüßungsbildschirm würde für jeden Raum Tasten haben, mit denen du zu jedem beliebigen Punkt springen kannst." Sie möchten also appdelegate durchlaufen, um diese Controller über tohc-Ereignisse auf Schaltflächen aufzurufen?

Dieser Ansatz folgt nicht den Apple Richtlinien und hat viele Nachteile.

Was ich versuche zu tun ist, klicken Sie auf eine Schaltfläche (die im Code erstellt wurde) und lassen Sie es einen anderen View-Controller aufrufen, dann führen Sie eine Funktion im neuen View-Controller.

Ich weiß, dass es in IB relativ leicht gemacht werden könnte, aber das ist keine Option.

Ein Beispiel von dem, was ich tun möchte, wäre, wenn Sie zwei View-Controller mit einem Begrüßungsbildschirm von House hätten. Der andere View-Controller hatte einen Durchgang durch das Haus, um durch alle Räume in einer festen Reihenfolge zu gehen. Der Begrüßungsbildschirm würde für jeden Raum Schaltflächen enthalten, mit denen Sie zu jedem beliebigen Punkt des Durchgangs springen können.


Befolgen Sie einfach diese Schritte

1.importieren Sie den App-Delegaten in die Klasse, in der Sie das App-Delegate-Objekt haben möchten.

#import "YourAppDelegate.h"

2.In Ihrer Klasse erstellen Sie eine Instanz Ihres App-Delegate-Objekts (es ist im Grunde ein Singleton).

YourAppDelegate *appDelegate=( YourAppDelegate* )[UIApplication sharedApplication].delegate;

3. Rufen Sie nun die Methode mit dem Selektor auf

if([appDelegate respondsToSelector:@selector(yourMethod)]){

        [appDelegate yourMethod];
    }

oder direkt bei

[appDelegate yourMethod];

für schnell

let appdel : AppDelegate = UIApplication.shared.delegate as! AppDelegate

Ich werde das erste empfehlen. Laufen und gehen.


Sie können #define uAppDelegate (AppDelegate *)[[UIApplication sharedApplication] delegate] in der Prefix.pch Datei Ihres Projekts Prefix.pch und dann jede Methode Ihres AppDelegate in jedem UIViewController mit dem folgenden Code UIViewController .

[uAppDelegate showLoginView];

Sie können auf den Delegaten wie folgt zugreifen:

MainClass *appDelegate = (MainClass *)[[UIApplication sharedApplication] delegate];

Ersetzen Sie MainClass durch den Namen Ihrer Anwendungsklasse.

Wenn Sie eine Eigenschaft für den anderen View-Controller haben, können Sie Folgendes aufrufen:

[appDelegate.viewController someMethod];

Und falls Sie Zugriff auf Ihren WatchKit-Erweiterungsdelegaten von einem View-Controller auf watchOS benötigen:

extDelegate = WKExtension.sharedExtension().delegate as WKExtensionDelegate?

Und wenn sich jemand fragt, wie man das swift :

if let myDelegate = UIApplication.sharedApplication().delegate as? AppDelegate {
   myDelegate.someMethod()
}

Wenn jemand das gleiche in Xamarin (Xamarin.ios / Monotouch) benötigt, hat dies für mich funktioniert:

var myDelegate = UIApplication.SharedApplication.Delegate as AppDelegate;

(Erfordert die Verwendung von UIKit;)


Update für Swift 3.0 und höher

//
// Step 1:- Create a method in AppDelegate.swift
//
func someMethodInAppDelegate() {

    print("someMethodInAppDelegate called")
}

Aufruf der obigen Methode von Ihrem Controller durch folgende

//
// Step 2:- Getting a reference to the AppDelegate & calling the require method...
//
if let appDelegate = UIApplication.shared.delegate as? AppDelegate {

    appDelegate.someMethodInAppDelegate()
}

Ausgabe:





appdelegate