【问题标题】:How do I pop out a ViewController(like a modal) programmatically?如何以编程方式弹出 ViewController(如模态)?
【发布时间】:2020-06-22 02:21:53
【问题描述】:

全部:

我正在做一个 swift 的 cocoa macos 应用项目,在一个故事板中包含多个 ViewController。

我知道我是否进行 segue 并将 segue 从第二个 ViewController 链接到第一个 ViewController。

我可以弹出 ViewController。

但是如果我有一个函数并且想要调用另一个 ViewController 以从第一个 ViewController 以编程方式呈现呢?

我搜索了很多以 UIStoryBoard 开头的示例,但我的 Storyboard 是 NSStoryboard。 有人可以提示我开始吗?

我的代码:

func checkPassword(SystemMsg:String) -> String{
        //print("x")
        let storyBoard = NSStoryboard(name: "Main", bundle: nil)
        let mainViewController : NSViewController = storyBoard.instantiateController(withIdentifier: "PasswordInput") as! NSViewController

        //self.present(mainViewController, asPopoverRelativeTo: <#T##NSRect#>, of: sender, preferredEdge: NSRectEdge, behavior: <#T##NSPopover.Behavior#>)

        return ""
    }

我在故事板中的 viewController 看起来像(没有 segue,没有链接):

enter image description here

如果有人能一步一步指导我,将不胜感激。

【问题讨论】:

标签: swift macos nsviewcontroller


【解决方案1】:

我自己想办法。

最简单的方法包含4个步骤:

  1. 在情节提要中标识您的主 ViewController 和第二个 ViewController
  2. 使用 instantiateController 创建您的主 ViewController
  3. 使用 instantiateController 创建您的第二个 ViewController
  4. 使用 presentAsModalWindow 或 presentAsSheet 在主 ViewController 上显示 secondController

首先我们需要正确识别故事板:

识别第一个故事板,我们需要点击顶部的蓝色立方体,然后在故事板ID区域中命名它

识别第二个storyboard,我们需要点击顶部的蓝色立方体,然后在Storyboard Id区域命名

示例代码:

func checkPassword(SystemMsg:String) -> String{
        //print("x")
        //let storyBoard = NSStoryboard(name: "Main", bundle: nil)
        let mainViewController : NSViewController = self.storyboard?.instantiateController(withIdentifier: "MainController") as! NSViewController
        let passwordInputViewController : NSViewController = self.storyboard?.instantiateController(withIdentifier: "PasswordInput") as! NSViewController
        mainViewController.presentAsModalWindow(passwordInputViewController)
        
        //Or
        
        mainViewController.presentAsSheet(passwordInputViewController)
       
        return ""
    }

如果我遗漏了什么,请温柔地纠正我。

参考:Transitioning between view controller, OS X

PS。如果你想在 ViewController 之间传递值,这是一个很好的参考:https://learnappmaking.com/pass-data-between-view-controllers-swift-how-to/#back-properties

【讨论】:

    猜你喜欢
    • 2015-08-16
    • 2019-11-14
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多