2016-06-08 74 views
0

,我已经设置好了。在我的视图控制器中,代表总是返回零

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 
} 
} 

请帮助。谢谢。

+2

因为它是零。你没有把它放在任何地方。 – Desdenova

+0

我是编程新手,如何设置它以及在哪里设置它? – carmelo

+2

[Delegation](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html#//apple_ref/doc/uid/TP40014097-CH25-ID276) – Desdenova

回答

0

您必须先设置委托。

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) 
    } 
} 
0

委托使用控制器

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

这是示例如何使用协议