2017-06-24 270 views
0

這裏我試圖通過使用協議將值從一個類LanguageSelectionTVC傳遞到另一個RegistrationVC委託函數未被調用iOS Swift

當我嘗試並調用該方法self.delegate?.setSelectedLangauges(self.languagesSpokenArray)LanguageSelectionTVC它不會調用該方法setSelectedLangaugesRegistration VC裏面可能有人請建議我要去的地方錯了嗎?

protocol LanguageSelectionTVCProtocol { 
    func setSelectedLangauges(_ valueSent: [String]) 
} 


class LanguageSelectionTVC: UITableViewController { 
    var delegate     : LanguageSelectionTVCProtocol? = nil 

    func saveAndClose() { 
     self.delegate?.setSelectedLangauges(self.languagesSpokenArray) 
     dismiss() 
    } 

} 


class RegistrationVC:   UIViewController, 
           UITableViewDelegate, 
           UITableViewDataSource, 
           LanguageSelectionTVCProtocol{ 

    func setSelectedLangauges(_ valueSent: [String]){ 
     self.showLanguagesSpoken(valueSent) 
    } 
} 

RegistrationVC移至LanguageSelectionTVC。下面tableView方法是我RegistrationVC

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     let row  = indexPath.row 
     let section = indexPath.section 

     let currentCell = tableView.cellForRow(at: indexPath) as! UITableViewCell 
     if section == 4 && row == 0 { 
      // The user has clicked on languages spoken cell 
      self.performSegue(withIdentifier: "LanguageSelectionTVC", sender: self) 
     } 
    } 
+1

接收數據如果要設置委託展示如何從'RegistrationVC' –

+0

移動到'LanguageSelectionTVC'你有** **設置委託地方。 – vadian

+0

@NiravD更新了我的問題,以顯示我如何從'RegistrationVC'移動到'LanguageSelectionTVC' – user44776

回答

1

你需要從preparForSegue訪問LanguageSelectionTVC來設置它delegate。所以overrideprepare(for:sender:)在你的RegistrationVC

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "LanguageSelectionTVC" { 
     let vc = segue.destination as! LanguageSelectionTVC 
     vc.delegate = self 
    } 
} 
+0

非常感謝,它的工作原理! – user44776

+0

@ user44776歡迎伴侶:) –

1

您需要RegistrationVC設置委託LanguageSelectionTVC,例如執行賽格瑞時,你可以將其設置:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    let targetVC = segue.destination as! LanguageSelectionTVC 
    targetVC.delegate = self 
} 
0

您需要設置委託。你能看到下面的兩個視圖控制器之間傳遞數據的準備示例。

import UIKit 
protocol SenderViewControllerDelegate 
{ 
    func messageData(str1:NSString) 
} 
class tableViewController: UIViewController, UITableViewDelegate, 
UITableViewDataSource 
{ 
var delegate: tableViewController? 
override func viewDidLoad() 
{ 
    super.viewDidLoad() 
    self.delegate?.messageData(str1: 「Hello world」) 
} 
} 

以下控制器

import UIKit 
class HomeViewController: UIViewController ,SenderViewControllerDelegate { 
    override func viewDidLoad() { 
    super.viewDidLoad() 
    let objtableview = tableViewController(nibName: "tableViewController",bundle: nil) 
     objtableview.delegate = self 
     self.navigationController?.pushViewController(objtableview, animated: true) 
    } 
    func messageData(str1:NSString){ 
     print(str1) 
    } 
}