协议方法不会在另一个视图控制器中执行

时间:2015-11-17 22:09:28

标签: swift delegates swift-protocols

我有一个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")
    }
}

但似乎没有发生任何事情......当我调试它时,它甚至不执行该功能

1 个答案:

答案 0 :(得分:1)

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

  • 第一个类FiltersViewController,它应该触发委托 方法,没有。因此没有设置处理方法。

  • 第二课,TopStoriesViewController,应该处理 方法,有委托。但是,在本课程中,您不会调用委托的方法,而是在课程FiltersViewController中调用它们。

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