xcode - PerformSegueWithIdentifier 未进行转换

标签 xcode swift macos cocoa viewcontroller

因此,我尝试在窗口加载后立即执行转场,而无需单击按钮或执行任何操作。 Segue 是从 View Controller 链接的,但不是从窗口 Controller 链接的,因为我一次只能从 Windowcontroller 链接一个 Segue。我直接在“windowWillLoad”和“windowDidLoad”中尝试了这段代码,并使用它自己的函数。它没有进行转变。是否总是需要通过按钮来激活?我可以不使用未直接链接到 WindowController 本身的 segue 吗?我基本上希望能够在启动 cocoa mac 应用程序时在两个不同的 View Controller 之间进行选择。

import Cocoa

class WindowOne: NSWindowController {
var i = 0

override func windowWillLoad() {


}
override func prepareForSegue(segue: NSStoryboardSegue, sender: AnyObject?) {
    if i == 0  {
        performSegueWithIdentifier("segone", sender: self)

    } else {
        performSegueWithIdentifier("segtwo", sender: self)
    }
}

override func windowDidLoad() {
    super.windowDidLoad()


}

}

最佳答案

这里的问题是,在窗口实际出现之前,segue 无法执行 - 而在 windowDidLoad 被调用时,它还没有被调用。

在 iOS 领域,我们将通过在 viewDidAppear 方法中调用 performSegueWithIdentifier 来处理此问题。

这里有两个选项,根据这个答案:viewWillAppear or viewDidAppear on NSWindowController

重写 showWindow 方法:

import AppKit

class WindowOne: NSWindowController {

    var i = 1

    override func showWindow(_ sender: Any?) {

        super.showWindow(sender)

        if i == 0  {
            performSegueWithIdentifier("segone", sender: self)
        } else {
            performSegueWithIdentifier("segtwo", sender: self)
        }
    }
}

或者对于更细粒度的行为,人们可能会捕获 NSWindowDelegate 调用。例如,如果您希望每当窗口到达前台时就发生转场,您可以实现 windowDidBecomeKey:

import AppKit

class WindowOne: NSWindowController, NSWindowDelegate {

    var i = 1

    override func windowDidLoad() {
        super.windowDidLoad()
        self.window?.delegate = self
    }

    func windowDidBecomeKey(_ notification: Notification) {
        if i == 0  {
            performSegueWithIdentifier("segone", sender: self)
        } else {
            performSegueWithIdentifier("segtwo", sender: self)
        }

    }
}

关于xcode - PerformSegueWithIdentifier 未进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38080843/

相关文章:

macos - launchd 文件手动运行但不会自动运行

iphone - iOS 在不分配新 View 的情况下访问来自委托(delegate)的 View 数据

ios - 如何将 UILabel 正好放在 UITableView 下方?

string - Swift 中 Int 的前导零

swift - 如何在 Swift 中获取数组中的倒数第二个元素?

macos - 为什么 TrueType 字体在 Mac 上仅使用 "Quadratic Curves"?

xcode - 安装字体不起作用

ios - CGAffineTransform:同时应用平移和缩放

ios - UICollectionViewCell 阴影导致小延迟

iphone - 如何使用 iTunes API 查找 Mac 应用程序?