Call app delegate method from view controller
Solution 1
Not sure why you want to do this. You probably shouldn't, but for the purpose of answering the question here it is:
// get a reference to the app delegate
let appDelegate: AppDelegate? = UIApplication.shared.delegate as? AppDelegate
// call didFinishLaunchWithOptions ... why?
appDelegate?.application(UIApplication.shared, didFinishLaunchingWithOptions: nil)
Solution 2
In Swift 3.0, you can call as:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.anyAppDelegateInstaceMethod()
Solution 3
This method is called just once when app launches. You can't from ViewController. Instead make user defined method in AppDelegete. and call that method from ViewController. By getting object of AppDelegate.
AppDelegate *appDel = (AppDelegate *)[UIApplication sharedApplication].delegate;
[appDel <Your method>];
Solution 4
Swift 4, Swift 5
As others have said you shouldn't do that. It would be better if you trigger it when you are in a certain application life cycle and do something specific using the Notification Center.
Example (in ViewController):
NotificationCenter.default.addObserver(
self,
selector: #selector(applicationWillEnterForeground),
name: UIApplication.willEnterForegroundNotification,
object: nil
)
However, if you do have to call the app delegate method, you can use this
let appDelegate: AppDelegate? = UIApplication.shared.delegate as? AppDelegate
Solution 5
Constructors:
Add a constructor in AppDelegate Class at the end of 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
}
and add a var like this
var boolForFun = Bool()
How to use reference in your class?
Method
for swift 3x access functins or variables
AppDelegate.shared().boolForFun = true
for else
appDelegate().methodFoo()
Variable
appDelegate().foo
Memon Irshad
Updated on May 18, 2021Comments
-
Memon Irshad about 3 years
I want to know if I can call an app delegate method from another ViewController.
When the app starts, the
application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
i method is called. Can I call this method a second time from another view controller?