2015-06-08 10 views
5

Ich möchte wissen, ob ich eine App-Delegate-Methode von einem anderen ViewController aufrufen kann. Wenn die App gestartet wird, wird die application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool i-Methode aufgerufen. Kann ich diese Methode ein zweites Mal von einem anderen View-Controller aus aufrufen?Rufen Sie App-Delegate-Methode von Ansicht Controller

+4

Sie können, aber Sie sollten nicht –

+0

können Sie mir zeigen, wie es geht ???/ –

+2

Überprüfen Sie diese Erklärung: http://Stackoverflow.com/a/8569646/3202193 –

Antwort

23

Nicht sicher, warum Sie dies tun möchten. Sie sollten wahrscheinlich nicht, aber für die Zwecke der hier die Frage zu beantworten ist:

// get a reference to the app delegate 
let appDelegate: AppDelegate? = UIApplication.shared.delegate as? AppDelegate 

// call didFinishLaunchWithOptions ... why? 
appDelegate?.application(UIApplication.shared, didFinishLaunchingWithOptions: nil) 
+0

thahks für die Hilfe –

+0

Kein Problem. Wenn Sie Zeit haben, erläutern Sie bitte, warum Sie diese Funktion zweimal aufrufen möchten. Lesen Sie auf jeden Fall den verlinkten Post von Ashish Kakkad. –

+0

wenn App zuerst Mittagessen dann AGB zeigen, wenn Benutzer klicken Sie auf zustimmen, dann kann er nächste Anmeldung vc und kann sich anmelden, aber Benutzer klicken Sie auf Ablehnen-Taste dann rufen Sie nächste VC aber Benutzer drücken Sie Login sein geht zu AGB-Seite und Vereinbarung Bedingung –

7

Diese Methode wird nur einmal beim Start der App aufgerufen. Sie können nicht von ViewController. Erstellen Sie stattdessen eine benutzerdefinierte Methode in AppDelegete. und rufen Sie diese Methode von ViewController auf. Indem Objekt von AppDelegate abgerufen wird.

AppDelegate *appDel = (AppDelegate *)[UIApplication sharedApplication].delegate; 
[appDel <Your method>]; 
+0

Danke für Ihre Hilfe –

+0

Es gibt eine fehlende '[' in Ihrer ersten Zeile. Ich denke, das ist die korrigierte Zeile? 'AppDelegate * appDel = [(AppDelegate *) [UIApplication sharedApplication] Delegat];' – Mymozaaa

13

In Swift 3.0 können Sie nennen als:

let appDelegate = UIApplication.shared.delegate as! AppDelegate 
appDelegate.anyAppDelegateInstaceMethod() 
1

Konstrukteurs:

einen Konstruktor hinzufügen in AppDelegate Klasse am Ende des Code

Swift 3.x

class func shared() -> AppDelegate 
{ 
    return UIApplication.shared.delegate as! AppDelegate 
} 

Swift 2.x

func appDelegate() -> AppDelegate 
{ 
return UIApplication.sharedApplication().delegate as! AppDelegate 
} 

und fügen Sie ein var ähnliche

var boolForFun = Bool() 

Wie Referenz in der Klasse benutzen?

Methode

für schnellen 3x Zugang functins oder Variablen

AppDelegate.shared().boolForFun = true 

für sonst

appDelegate().methodFoo() 

Variable

appDelegate().foo 
Verwandte Themen