別のViewControllerからアプリデリゲートメソッドを呼び出すことができるかどうかを知りたいです。
アプリが起動すると、application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
iメソッドが呼び出されます。別のView Controllerからこのメソッドをもう一度呼び出すことはできますか?
なぜこれをしたいのかわかりません。おそらくすべきではありませんが、ここでの質問に答えるために次のようにします。
// 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()
このメソッドは、アプリの起動時に一度だけ呼び出されます。 ViewControllerからはできません。代わりに、AppDelegeteでユーザー定義メソッドを作成します。そしてViewControllerからそのメソッドを呼び出します。 AppDelegateのオブジェクトを取得します。
AppDelegate *appDel = (AppDelegate *)[UIApplication sharedApplication].delegate;
[appDel <Your method>];
コンストラクター:
コードの最後にAppDelegateクラスにコンストラクターを追加します
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()
クラスでリファレンスを使用する方法は?
方法
for Swift 3xアクセス関数または変数
AppDelegate.shared().boolForFun = true
他の
appDelegate().methodFoo()
変数
appDelegate().foo