web-dev-qa-db-ja.com

View Controllerからアプリデリゲートメソッドを呼び出す

別のViewControllerからアプリデリゲートメソッドを呼び出すことができるかどうかを知りたいです。

アプリが起動すると、application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool iメソッドが呼び出されます。別のView Controllerからこのメソッドをもう一度呼び出すことはできますか?

14
Memon Irshad

なぜこれをしたいのかわかりません。おそらくすべきではありませんが、ここでの質問に答えるために次のようにします。

// 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()
22
Tejinder

このメソッドは、アプリの起動時に一度だけ呼び出されます。 ViewControllerからはできません。代わりに、AppDelegeteでユーザー定義メソッドを作成します。そしてViewControllerからそのメソッドを呼び出します。 AppDelegateのオブジェクトを取得します。

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

コンストラクター:

コードの最後に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
1
Anurag Sharma