gpt4 book ai didi

xcode - PerformSegueWithIdentifier 未进行转换

转载 作者:行者123 更新时间:2023-11-30 10:01:50 25 4
gpt4 key购买 nike

因此,我尝试在窗口加载后立即执行转场,而无需单击按钮或执行任何操作。 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com