簡體   English   中英

委托功能未稱為iOS Swift

[英]Delegate function not being called iOS Swift

在這里,我試圖通過使用協議將值從一個類LanguageSelectionTVC傳遞給另一個RegistrationVC

當我嘗試在LanguageSelectionTVC調用方法self.delegate?.setSelectedLangauges(self.languagesSpokenArray) ,它沒有在類Registration VC調用方法setSelectedLangauges ,有人可以建議我要去哪里嗎?

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 override prepare(for:sender:)

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

您需要將RegistrationVC中的委托設置為LanguageSelectionTVC,例如,可以在執行segue時進行設置:

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

您需要設置委托。 您能否在下面的示例中看到兩個視圖控制器之間的傳遞數據?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM