簡體   English   中英

nil在具有兩個不同Bundle(Swift)的兩個ViewController之間委托

[英]nil Delegate between two ViewController with two different Bundle (swift)

nil使用swift 4在具有兩個不同Bundle的兩個ViewController之間委托(在第二代碼中進行了注釋)

這是我的代碼:

第一個ViewController:

class FirstVC : UIViewController, MerchantResultObserver{
    var secVC = SecondVC()

  override func viewDidLoad() {
        secVC.delegate = self

            let storyboard = UIStoryboard(name: “SecondVC”, bundle: Bundle(identifier: “SecondBundle”))
            let controller = storyboard.instantiateInitialViewController()
            self.present(controller!, animated: true, completion: nil)

            secVC.initSecondVC(data)
    }



 func Error(data: String) {
        print("-------------Error Returned------------- \(data)")
    }


 func Response(data: String) {
        print("-------------Response Returned------------- \(data)")
    }

}

第二個ViewController:

public class SecondVC: UIViewController {
    public weak var delegate: MerchantResultObserver!


 public func initSecondVC(_ data : String){
        print(data)
}

@IBAction func sendRequest(_ sender: UIButton) {
            delegate?.Response(data: “dataReturnedSuccessfully”)  // delegate is nil //
           dismiss(animated: true, completion: nil)                 // returned to FirstVC without returning “dataReturnedSuccessfully” //
}

}

public protocol MerchantResultObserver: class{
    func Response(data : String)
    func Error(data : String)
}

任何幫助,將不勝感激

var secVC = SecondVC()

let storyboard = UIStoryboard(name: “SecondVC”, bundle: Bundle(identifier: “SecondBundle”))
let controller = storyboard.instantiateInitialViewController() as? SecondVC

這些都是不同的實例。

您可以將委托分配給控制器,例如

controller.delegate = self

它將在First View Controller中調用已實現的委托方法。

完整代碼。

let storyboard = UIStoryboard(name: “SecondVC”, bundle: Bundle(identifier: “SecondBundle”))
if let controller = storyboard.instantiateInitialViewController() as? SecondVC {
       //Assign Delegate
       controller.delegate = self

       //It's not init, but an assignment only, as per your code.
       controller.initSecondVC(data) 


      self.present(controller, animated: true, completion: nil)
}

還有一件事,不要在ViewDidLoad顯示View。 您可以將代碼放在某些按鈕或延遲方法中。

暫無
暫無

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

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