在我的视图控制器中,代表总是返回零
问题描述:
,我已经设置好了。在我的视图控制器中,代表总是返回零
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
}
}
请帮助。谢谢。
答
您必须先设置委托。
let viewController = ViewController()
let baseViewController = BaseViewController()
viewController.delegate = baseViewController
这也将是明智的委托弱引用并且不强迫展开与!
。当你想通过viewcontrollers.this的形式给出的数据之间是一一对应的
下面是答案如何通过使用委托 数据视图 - 控制
鉴于定义协议
class ViewController: UIViewController,UITableViewDataSource, UITableViewDelegate {
weak var delegate : MenuDelegate?
func performaction() {
delegate?.updateIndexOfMenuExpanded(false)
}
}
答
委托使用控制器
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.
}
现在协议是created.to在另一个视图控制器数据传递
的ViewController 1我们要访问数据
func btnBackClicked(str: String) {
title = str
}
输出:Krutarth
这是示例如何使用协议
因为它是零。你没有把它放在任何地方。 – Desdenova
我是编程新手,如何设置它以及在哪里设置它? – carmelo
[Delegation](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html#//apple_ref/doc/uid/TP40014097-CH25-ID276) – Desdenova