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

标签 macos cocoa storyboard

现在我有一个 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/

相关文章:

macos - Docker 无法在 Mac OS 上挂载/var 下的任何文件夹

cocoa - UIView没有事件

objective-c - 为什么 [NSTextStorage setAttributedString] 与 NSMutableAttributedString 崩溃?

macos - 关于 Cocoa 应用程序目录布局的文档?

ios - Xcode Storyboard 严重问题变为空白?

java - 将 JAVA_HOME 设置为 JDK 位置 mac osx 10.9.5

android - 如何通过 Bluestacks 在 Mac 上运行 apk 文件

JavaScript 未在 WKWebView 中执行

iphone - 将数据从 plist 加载到 UITableView

ios - 在搜索栏中输入内容时导航栏消失