1

私はこれですべてのView Controllerをサブクラス化するために使用しているrootviewcontrollerを持っています.View Controllerを実行しようとしているメソッドを持つプロトコルがそのように設定されています.

ルート ビュー コントローラー

protocol RootControllerDelegate: class {

    func refreshTheTable(sender: AnyObject)

}

class RootViewController: UIViewController {

    weak var rootDelegate : RootControllerDelegate?
}

だから私はデリゲート関数を起動すると思われる私のView Controllerの1つにIBActionを持つボタンを持っています。

関数を起動するView Controller

// You can see here I'm subclassing the root view controller

class FiltersViewController: RootViewController, UITableViewDataSource, UITableViewDelegate {

        @IBAction func doneButtonDidTouch(sender: AnyObject) {

        rootDelegate?.refreshTheTable(sender)
        dismissViewControllerAnimated(true, completion: nil)

    }
}

したがって、このView Controllerでは、viewdidAppearでデリゲートを設定し、関数を呼び出して、テスト目的で何かを印刷しましたが、何も起こりません。

関数を実行するView Controller

class TopStoriesViewController: RootViewController, UITableViewDataSource, UITableViewDelegate, ReminderViewControllerDelegate, DZNEmptyDataSetDelegate, DZNEmptyDataSetSource, RootControllerDelegate { 

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(false)

       rootDelegate = self
   }


    func refreshTheTable(sender: AnyObject) {
        print("dsdsdsds")
    }
}

しかし、何も起こっていないようです...デバッグしても、関数も実行されません

4

1 に答える 1

1

2 つのクラスと 2 人の異なる代理人が割り当てられています。

  • FiltersViewControllerデリゲート メソッドを起動する必要がある最初のクラスには、nil があります。そのため、メソッドを処理するために何も設定されていません。

  • TopStoriesViewControllerメソッドを処理する必要がある2 番目のクラスに
    はデリゲートがあります。ただし、このクラスではデリゲートのメソッドを呼び出すのではなく、クラスで呼び出していますFiltersViewController

TopStoriesViewController(デリゲート メソッドが実装されている) を (デリゲート メソッドを起動する) のデリゲートとして設定する必要がFiltersViewControllerあります。コードから、割り当てられたデリゲートTopStoriesViewControllerは必要ありません。

于 2015-11-17T22:17:21.717 に答える