2017-06-24 262 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) 
    } 
}