从视图控制器调用应用程序委托方法
Call app delegate method from view controller
我想知道是否可以从另一个 ViewController 调用应用程序委托方法。
应用程序启动时,会调用 application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
i 方法。我可以从另一个视图控制器第二次调用这个方法吗?
此方法仅在应用启动时调用一次。你不能从 ViewController。而是在 AppDelegete 中创建用户定义的方法。并从 ViewController 调用该方法。通过获取 AppDelegate 的对象。
AppDelegate *appDel = (AppDelegate *)[UIApplication sharedApplication].delegate;
[appDel <Your method>];
不确定你为什么要这样做。你可能不应该,但为了回答这里的问题,它是:
// get a reference to the app delegate
let appDelegate: AppDelegate? = UIApplication.shared.delegate as? AppDelegate
// call didFinishLaunchWithOptions ... why?
appDelegate?.application(UIApplication.shared, didFinishLaunchingWithOptions: nil)
在Swift 3.0中,你可以这样调用:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.anyAppDelegateInstaceMethod()
构造函数:
在代码末尾的AppDelegateClass中添加一个构造函数
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
}
并像这样添加一个变量
var boolForFun = Bool()
如何在您的 class 中使用引用?
方法
对于 swift 3x
访问函数或变量
AppDelegate.shared().boolForFun = true
其他
appDelegate().methodFoo()
变量
appDelegate().foo
Swift4,Swift5
正如其他人所说,您不应该那样做。
如果你在某个应用程序生命周期中触发它,并使用通知中心做一些特定的事情,那就更好了。
示例(在 ViewController 中):
NotificationCenter.default.addObserver(
self,
selector: #selector(applicationWillEnterForeground),
name: UIApplication.willEnterForegroundNotification,
object: nil
)
但是,如果您确实必须调用应用程序委托方法,则可以使用此方法
let appDelegate: AppDelegate? = UIApplication.shared.delegate as? AppDelegate
我想知道是否可以从另一个 ViewController 调用应用程序委托方法。
应用程序启动时,会调用 application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
i 方法。我可以从另一个视图控制器第二次调用这个方法吗?
此方法仅在应用启动时调用一次。你不能从 ViewController。而是在 AppDelegete 中创建用户定义的方法。并从 ViewController 调用该方法。通过获取 AppDelegate 的对象。
AppDelegate *appDel = (AppDelegate *)[UIApplication sharedApplication].delegate;
[appDel <Your method>];
不确定你为什么要这样做。你可能不应该,但为了回答这里的问题,它是:
// get a reference to the app delegate
let appDelegate: AppDelegate? = UIApplication.shared.delegate as? AppDelegate
// call didFinishLaunchWithOptions ... why?
appDelegate?.application(UIApplication.shared, didFinishLaunchingWithOptions: nil)
在Swift 3.0中,你可以这样调用:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.anyAppDelegateInstaceMethod()
构造函数:
在代码末尾的AppDelegateClass中添加一个构造函数
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
}
并像这样添加一个变量
var boolForFun = Bool()
如何在您的 class 中使用引用?
方法
对于 swift 3x 访问函数或变量
AppDelegate.shared().boolForFun = true
其他
appDelegate().methodFoo()
变量
appDelegate().foo
Swift4,Swift5
正如其他人所说,您不应该那样做。 如果你在某个应用程序生命周期中触发它,并使用通知中心做一些特定的事情,那就更好了。
示例(在 ViewController 中):
NotificationCenter.default.addObserver(
self,
selector: #selector(applicationWillEnterForeground),
name: UIApplication.willEnterForegroundNotification,
object: nil
)
但是,如果您确实必须调用应用程序委托方法,则可以使用此方法
let appDelegate: AppDelegate? = UIApplication.shared.delegate as? AppDelegate