在我的视图控制器中,我已经设置了这样的。
protocol MenuDelegate {
func updateIndexOfMenuExpanded(index: Bool)
}
class ViewController: UIViewController,UITableViewDataSource, UITableViewDelegate {
var delegate : MenuDelegate?
func performaction() -> Void{
delegate!.updateIndexOfMenuExpanded(false)
}
}
和我的baseviewcontroller
class BaseViewController: UIViewController, MenuDelegate{
func updateIndexOfMenuExpanded(index: Bool){
self.menuIsExpanded = index
}
}
请帮忙。谢谢。
答案 0 :(得分:0)
您必须先设置委托。
let viewController = ViewController()
let baseViewController = BaseViewController()
viewController.delegate = baseViewController
将委托作为弱引用并且不强制用!
展开也是明智之举。
class ViewController: UIViewController,UITableViewDataSource, UITableViewDelegate {
weak var delegate : MenuDelegate?
func performaction() {
delegate?.updateIndexOfMenuExpanded(false)
}
}
答案 1 :(得分:0)
当你想在viewcontrollers之间传递数据时使用委托。这个aproach是一对一的
以下是如何使用委托传递数据的答案 在viewcontroller中
在视图控制器中定义协议
protocol ViewController1BackClicked {
func btnBackClicked(str : String)
}
类ViewController1:UIViewController {
var strTitle : String?
var delegate : ViewController1BackClicked?
override func viewDidLoad() {
super.viewDidLoad()
if strTitle != nil{
title = strTitle
}
}
override func viewWillDisappear(animated: Bool) {
delegate?.btnBackClicked("Krutarth")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
现在创建协议以在另一个视图控制器中传递数据
viewcontroller 1我们要访问数据
func btnBackClicked(str: String) {
title = str
}
输出:Krutarth
这是如何使用协议
的示例