1

我有一个 rootviewcontroller,我用它来子类化我的所有视图控制器,其中有一个协议,其中有一个我试图执行的方法,视图控制器设置如下

根视图控制器

protocol RootControllerDelegate: class {

    func refreshTheTable(sender: AnyObject)

}

class RootViewController: UIViewController {

    weak var rootDelegate : RootControllerDelegate?
}

所以我在我的一个视图控制器中有一个带有 IBAction 的按钮,它应该会触发委托功能。

视图控制器触发功能

// 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)

    }
}

因此,在这个视图控制器中,我在 viewdidAppear 中设置了委托,并且还调用了该函数,只是为了现在打印一些东西,只是为了测试目的,但什么也没发生。

视图控制器应该在哪里执行函数

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

您分配了两个班级和两个不同的代表。

  • 第一个类,FiltersViewController应该触发委托方法,它的值为 nil。所以没有设置任何东西来处理这个方法。

  • TopStoriesViewController应该处理该方法的第二个类
    具有委托。但是,在这个类中,您不调用委托的方法,而是在类中调用它们FiltersViewController

您必须将TopStoriesViewController(已实现委托方法)设置为FiltersViewController(触发委托方法)的委托。TopStoriesViewController从您的代码中,不需要分配的委托。

于 2015-11-17T22:17:21.717 回答