gpt4 book ai didi

macos - OS X Storyboard : using "show" segue without allowing duplicate new windows to show?

转载 作者:行者123 更新时间:2023-12-03 16:23:06 25 4
gpt4 key购买 nike

现在我有一个 OS X Storyboard应用程序,它有一个主窗口,上面有一个按钮,可以触发另一个 View Controller 的“显示”segue。现在我已经将 Segue 设置为模态,因为如果不这样做,用户可能会再次单击同一按钮并最终得到同一窗口的两个副本。

有没有一种方法可以让我完成此任务,而无需重组 Storyboard以将这些 View Controller 嵌入到单独的窗口 Controller 中(这似乎违背了 Storyboard提供的灵 active 的目的)?

最佳答案

编辑:虽然下面的答案确实有效,但它绝对不是最好的方法。在 Storyboard中,选择目标 View 的 View Controller ,然后转到属性检查器并将演示从多个更改为单个。就是这样,不需要任何代码。

view controller presentation attribute

<小时/>

不确定这是最好的方法,但在NSViewController中正在插入 Segue,您可以为目的地添加属性 NSViewController并且,在您的 prepareForSegue:sender: 中方法,分配目标 View Controller 。最后,在shouldPerformSegueWithIdentifier:sender:方法,检查目标 View Controller 是否已分配,如果是,则将其窗口置于前面并返回 NO意思是不执行segue,否则返回YES 。这是一个简单的示例(包含在 NSViewController 中,并带有启动转场的按钮):

@interface ViewController ()
@property (weak) NSViewController *pushedViewController;
@end

@implementation ViewController

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
if (self.pushedViewController) {
[self.pushedViewController.view.window makeKeyAndOrderFront:self];
return NO;
}
return YES;
}

- (void)prepareForSegue:(NSStoryboardSegue *)segue sender:(id)sender {
self.pushedViewController = segue.destinationController;
}

@end

当您关闭包含目标 View Controller 的窗口时,这会将原始 View Controller 的 PushViewController 属性设置为 nil,因此如果窗口尚未打开,segue 将执行。同样,可能有更好的方法来做到这一点。希望这会有所帮助。

乔恩

关于macos - OS X Storyboard : using "show" segue without allowing duplicate new windows to show?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36096257/

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