2015-10-09 4 views
2

Я застрял! Очевидно ... потому что я задаю вопрос здесь.Минимизация/миниатюризация какао NSWindow без заголовка

Я создал собственные пользовательские элементы управления окнами для своего приложения OS X/cocoa. Кнопка закрытия работает отлично - никаких проблем. Кнопка «Свернуть» не работает вообще, когда я отключу заголовок.

enter image description here

Так что, когда строка заголовка на как на картинке выше, и я ударил этот метод, минимизирующий работает отлично:

ViewController.h

@interface ViewController : NSViewController { 

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

} 
@end 

ViewController. м

@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];. Ни один из них не работал. На самом деле ... обе работают, если строка заголовка включена. Но как только я отключу его, не работай.

titlebar turned off

app with no title bar

Мысли/комментарии?

О, я использую раскадровки, Xcode 7, и нацеливаю 10.10 и используя 10.11 SDK, если это вообще имеет значение.

Заранее спасибо.

+0

Когда вы отключите/скройте его, что является статусом главного меню (должна быть проверка, что означает, что неподдерживаемые пункты меню выделены серым цветом). Если они доступны, они работают? (вызывают ли они ваш viewController?) –

+0

[NSWindow performMiniaturize:] вызывает [minimButton performClick: esi], + [NSWindow _minimizeAll]: вызовы [ebx standardWindowButton: 0x1] isEnabled]! = 0x0) && ([ebx isVisible]! = 0x0). Ручное переопределение вызывает private _minimizeToDock. Это означает, что если вы хотите, чтобы они работали, вы используете частные селекторы или выпадаете эти кнопки. –

+0

Вы хотите оставить эти кнопки в этом месте? – mangerlahn

ответ

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.