【问题标题】:Pass data from NSViewController to another NSViewController which is in NSSplitViewController?将数据从 NSViewController 传递到 NSSplitViewController 中的另一个 NSViewController?
【发布时间】:2018-12-11 22:45:21
【问题描述】:

您好,我在向 NSSplitViewController 发送数据时遇到问题。它似乎不像在 IOS 开发中那样工作。

第一控制器:

class LoginController: NSViewController {
 //.....
  @IBAction func Login(_ sender: Any) {
     //....
     let story = NSStoryboard(name: NSStoryboard.Name(rawValue: "Main"), 
                bundle: nil).instantiateController(withIdentifier: 
                NSStoryboard.SceneIdentifier(rawValue: "SPLIT")) as! 
                NSSplitViewController
      let vc : ContainerController = ContainerController();
      vc.passedData = "karosas";
      self.view.window?.contentViewController = story;
     //....
   }
 //.....
}

第二个 NSSplitViewController :

import Cocoa

class ContainerController: NSSplitViewController {

    var passedData = "";

    override func viewDidLoad() {
        super.viewDidLoad()
        print(passedData);
        print("nzn");
    }

}

现在我正在尝试向 NSViewSplitController 发送数据。我需要将数据传递给 NSSplitViewController 中的 NSViewController。我确实尝试了许多不同的方法,但我失败了。所以我认为我需要先将数据传递给SplitController,然后再传递给ViewController。但我什至不能向 NSSplitViewController 发送任何数据。有人可以帮我吗?

【问题讨论】:

    标签: swift macos nsviewcontroller


    【解决方案1】:

    如果 LoginController 和 MenuController 都在 ContainerController 中,你可以这样做:

    登录控制器

    import Cocoa
    
    class LoginController: NSViewController {
     //.....
      @IBAction func Login(_ sender: Any) {
         //....
         self.userName = value["name"] as! String
         let MenuVC = parent?.childViewControllers[1] as! MenuController // 0 or 1 depending on order in SplitView
          MenuVC.passedData = self.username
          self.view.window?.contentViewController = parent as! ContainerController
         //....
       }
     //.....
    }
    

    菜单控制器

    import Cocoa
    
    class MenuController: NSViewController {
    
        var passedData = ""
    
        override func viewDidLoad() {
            super.viewDidLoad()
            print(passedData)
            print("nzn")
        }
    
    }
    

    【讨论】:

    • 这非常适用于SplitViewController,您需要创建一个名为ContainerController 的新NSSplitViewController 文件。值得一提的是,最左边的视图控制器是 childViewController[0],最右边的控制器是 childViewController[n - 1]
    【解决方案2】:

    我已经用这段代码做到了。

            self.userName = value["name"] as! String;
            let story = NSStoryboard(name: NSStoryboard.Name(rawValue: "Main"), bundle: nil)
            .instantiateController(withIdentifier: NSStoryboard.SceneIdentifier(rawValue: "SPLIT")) 
            as! ContainerController
            let dest = story.childViewControllers[0] as! MenuController;
            dest.passData = self.userName;
            self.view.window?.contentViewController = story;
    

    我不知道这是一个好方法,但它有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-13
      • 1970-01-01
      • 2019-01-02
      • 1970-01-01
      相关资源
      最近更新 更多