【问题标题】:Minimize / miniaturize cocoa NSWindow without titlebar最小化/小型化可可 NSWindow 没有标题栏
【发布时间】:2016-01-07 19:18:10
【问题描述】:

我被困住了!显然......因为我在这里发布一个问题。

我为我的 OS X / cocoa 应用程序构建了自己的自定义窗口控件。关闭按钮效果很好——没问题。当我禁用标题栏时,最小化按钮根本不起作用。

所以当标题栏像上图一样打开并且我点击这个方法时,最小化工作正常:

ViewController.h

@interface ViewController : NSViewController {

    - (IBAction)minimize:(id)sender;        
    @property (strong) IBOutlet NSButton *btn_minimize;

}
@end

ViewController.m

@implementation ViewController

    - (void)viewDidLoad {
        [super viewDidLoad];
    }

    - (IBAction)minimize:(id)sender {
      [[NSApp mainWindow] performMiniaturize:self];
    }

    -(IBAction)terminate:(id)sender {
        [NSApp terminate:self];
    }
@end

然后,如果我禁用标题栏,同样的方法将停止工作。没有错误,什么都没有。我都试过了:[[NSApp mainWindow] miniaturize:nil];[[NSApp mainWindow] performMiniaturize:self];。两者都不起作用。实际上......如果标题栏打开,两者都可以工作。但是一旦我把它关掉,就不管用了。

想法/cmets?

哦,我正在使用 Storyboards、Xcode 7,并且我的目标是 10.10 并使用 10.11 SDK,如果这很重要的话。

提前致谢。

【问题讨论】:

  • 当您禁用/隐藏它时,主菜单栏的状态是什么(应该有验证,这意味着不受支持的菜单项显示为灰色)。如果它们是可点击的,它们会起作用吗? (他们是在调用你的 viewController 吗?)
  • [NSWindow performMiniaturize:] 调用 [minimizeButton performClick:esi], +[NSWindow _minimizeAll]: 调用 [ebx standardWindowButton:0x1] isEnabled] != 0x0) && ([ebx isVisible] != 0x0) .手动覆盖调用私有 _minimizeToDock。这意味着如果您希望它们工作,您可以使用私有选择器或显示这些按钮
  • 你想把这些按钮留在这个位置吗?

标签: objective-c xcode macos cocoa nswindow


【解决方案1】:

您必须保留原来的“红绿灯”按钮并手动隐藏它们。

这是我配置窗口的方式:

self.titleVisibility = NSWindowTitleHidden;
self.titlebarAppearsTransparent = YES;
self.movableByWindowBackground = YES;

以下是我隐藏红绿灯的方法:

for (id subview in self.contentView.superview.subviews) {
    if ([subview isKindOfClass:NSClassFromString(@"NSTitlebarContainerView")]) {
        NSView *titlebarView = [subview subviews][0];
        for (id button in titlebarView.subviews) {
            if ([button isKindOfClass:[NSButton class]]) {
                [button setHidden:YES];
            }
        }
    }
}

See sample project here.

【讨论】:

    【解决方案2】:

    就我而言,我想完全移除标题栏并通过其他方式(例如:按键分配)触发小型化。

    我发现需要确保窗口样式掩码包含 NSMiniaturizableWindowMask 才能使 NSWindow::miniaturize 生效。

    【讨论】:

      猜你喜欢
      • 2011-12-02
      • 2017-03-06
      • 1970-01-01
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      • 2014-08-09
      • 2014-10-04
      • 1970-01-01
      相关资源
      最近更新 更多