我有一个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")
}
}
但似乎没有发生任何事情......当我调试它时,它甚至不执行该功能
答案 0 :(得分:1)
您分配了两个班级和两个不同的代表。
第一个类FiltersViewController
,它应该触发委托
方法,没有。因此没有设置处理方法。
第二课,TopStoriesViewController
,应该处理
方法,有委托。但是,在本课程中,您不会调用委托的方法,而是在课程FiltersViewController
中调用它们。
您必须将TopStoriesViewController
(已实现委托方法)设置为FiltersViewController
的委托(激活委托方法)。从您的代码中,不需要在TopStoriesViewController
中分配的代理。