在这里,我试图通过使用协议(protocol)将值从一个类 LanguageSelectionTVC
传递到另一个 RegistrationVC
。
当我尝试在 LanguageSelectionTVC
中调用方法 self.delegate?.setSelectedLangauges(self.languagesSpokenArray)
时,它不会调用方法 setSelectedLangauges
类内 Registration 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)
}
}
最佳答案
您需要从 preparForSegue
访问 LanguageSelectionTVC
以设置它的 delegate
。因此,覆盖
RegistrationVC
中的prepare(for:sender:)
。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "LanguageSelectionTVC" {
let vc = segue.destination as! LanguageSelectionTVC
vc.delegate = self
}
}
关于ios - 委托(delegate)函数未被调用 iOS Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44734911/