nil在两个ViewController之间委派两个不同的Bundle(swift)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nil在两个ViewController之间委派两个不同的Bundle(swift)相关的知识,希望对你有一定的参考价值。

nil使用swift 4在两个ViewController和两个不同的Bundle之间进行委托(在第二个代码中注释)

这是我的代码:

First 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。您可以将代码放在某个按钮或延迟方法中。

以上是关于nil在两个ViewController之间委派两个不同的Bundle(swift)的主要内容,如果未能解决你的问题,请参考以下文章

IOS开发之利用单例模式完成两个ViewController之间的传值

无法推送 viewController,因为 navigationController 为 nil

从 UITableView 更改 viewController 时将可选值显示为“nil”

在 UIPageViewController 中包含的 ViewController 的委托获得 nil

在两个 viewController 之间导航

如何在没有 StoryBoard 的两个 ViewController 之间使用委托?