【问题标题】:PerformSegueWithIdentifier not making the transitionPerformSegueWithIdentifier 未进行转换
【发布时间】:2016-06-28 15:50:31
【问题描述】:

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

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 不需要按钮,但必须由定义它的类的实例来执行。
  • Philip,你是指segue来自的视图控制器吗?你能详细说明一下吗?我希望跳过加载segues来自哪里的视图控制器,并直接跳转到segues和他们要去的地方。我猜那可能是不可能的?

标签: xcode swift macos cocoa viewcontroller


【解决方案1】:

这里的问题是在窗口实际出现之前无法执行 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)
        }

    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多