2016-06-08 78 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

這是示例如何使用協議