来自 NSView 子类的 performSegueWithIdentifier?
performSegueWithIdentifier from a NSView subclass?
我有一个文档 window,其中包含许多 NSView 子类,它们在使用选项卡控件之间切换。每个子类和 window 的 ViewController 都支持通过与 First Responder 关联的菜单项访问的不同用户操作。
我想从其中一个 视图 执行 segue 以响应菜单项。但是,NSView 不支持 performSegueWithIdentifier
,它似乎是 NSViewController 单独的一部分。
有人可以提出解决此问题的方法吗?我看到了将 VC 传递到视图中的建议,但我不清楚该怎么做。或者有更好的方法吗?
view.containingController.performSegue()
注意:您必须将 containingController 添加到您的视图中
我会将 viewController 添加到响应链,然后在扩展中使 containingController 成为一个计算 属性!
例如添加 vc 作为响应者:
override func awakeFromNib() {
super.awakeFromNib()
self.nextResponder = self.view
for subview in self.view.subviews {
subview.nextResponder = self
}
}
例如containingController in extension
extension NSView {
var containingController: NSViewController? {
get {
while(self.nextResponder != nil) {
if(self.nextResponder is NSViewController) {
return self.nextResponder
}
}
return nil
}
}
}
你可以这样做(参见 Daij-Djan 的回答),但这不是我推荐的,因为假设的程序员将使用你的代码,但不熟悉它(比方说,你在year :) ) 可能会被这种行为吓到。
我建议您使用 viewRequiresToPerformTransition(view: YourViewSubclass)
之类的方法向您的 NSView
添加一个委托(符合您的自定义协议,我们称之为 MyViewDelegate
)。然后你在你的视图控制器中实现这个方法(更一般地说,你符合 MyViewDelegate
协议)并在它的实现中执行你想要的任何 segue。
我有一个文档 window,其中包含许多 NSView 子类,它们在使用选项卡控件之间切换。每个子类和 window 的 ViewController 都支持通过与 First Responder 关联的菜单项访问的不同用户操作。
我想从其中一个 视图 执行 segue 以响应菜单项。但是,NSView 不支持 performSegueWithIdentifier
,它似乎是 NSViewController 单独的一部分。
有人可以提出解决此问题的方法吗?我看到了将 VC 传递到视图中的建议,但我不清楚该怎么做。或者有更好的方法吗?
view.containingController.performSegue()
注意:您必须将 containingController 添加到您的视图中
我会将 viewController 添加到响应链,然后在扩展中使 containingController 成为一个计算 属性!
例如添加 vc 作为响应者:
override func awakeFromNib() {
super.awakeFromNib()
self.nextResponder = self.view
for subview in self.view.subviews {
subview.nextResponder = self
}
}
例如containingController in extension
extension NSView {
var containingController: NSViewController? {
get {
while(self.nextResponder != nil) {
if(self.nextResponder is NSViewController) {
return self.nextResponder
}
}
return nil
}
}
}
你可以这样做(参见 Daij-Djan 的回答),但这不是我推荐的,因为假设的程序员将使用你的代码,但不熟悉它(比方说,你在year :) ) 可能会被这种行为吓到。
我建议您使用 viewRequiresToPerformTransition(view: YourViewSubclass)
之类的方法向您的 NSView
添加一个委托(符合您的自定义协议,我们称之为 MyViewDelegate
)。然后你在你的视图控制器中实现这个方法(更一般地说,你符合 MyViewDelegate
协议)并在它的实现中执行你想要的任何 segue。