반응형

.h

{

    NSPopover * popover;

}

@property (strong, nonatomic) NSStatusItem *statusItem;

@property (strong, nonatomic) NSEvent *popoverTransiencyMonitor;


.m

    //팝오버-뷰컨트롤러로 지정

    _statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength]; //아이템 길이만큼 지정

    [_statusItem setTitle:@"Test"]; //이미지로 지정 가능 - setImage:

    [_statusItem setEnabled:YES];

    [_statusItem setHighlightMode:YES];

    [_statusItem setTarget:self];

    [_statusItem setAction:@selector(togglePopover:)];


    NSStoryboard *st = [NSStoryboard storyboardWithName:@"Main" bundle:nil];

    ViewController * viewController = [st instantiateControllerWithIdentifier:@"ViewController"];

    popover = [NSPopover new];

    popover.contentViewController = viewController;


    // 메뉴 스타일로 지정

    NSMenu *menu = [[NSMenu alloc] init];

    [menu addItemWithTitle:@"Open Feedbin" action:@selector(showPopover:) keyEquivalent:@""];

    [menu addItemWithTitle:@"Refresh" action:@selector(showPopover:) keyEquivalent:@""];

    [menu addItem:[NSMenuItem separatorItem]]; // A thin grey line

    [menu addItemWithTitle:@"Quit Feedbin Notifier" action:@selector(terminate:) keyEquivalent:@""];

    _statusItem.menu = menu;






- (void) showPopover:(id)sender {

    [popover showRelativeToRect:NSZeroRect ofView:(NSView *)sender preferredEdge:NSMinYEdge];

    if(_popoverTransiencyMonitor == nil)

    {

        _popoverTransiencyMonitor = [NSEvent addGlobalMonitorForEventsMatchingMask:NSLeftMouseDownMask|NSRightMouseDownMask handler:^(NSEvent* event)

                                    {

                                        [self closePopover:sender];

                                    }];

    }

}

-(void)closePopover:(id)sender {

    if(_popoverTransiencyMonitor)

    {

        [NSEvent removeMonitor:_popoverTransiencyMonitor];

        

        _popoverTransiencyMonitor = nil;

    }

    [popover performClose:sender];

}

-(void)togglePopover:(id)sender {

    if ([popover isShown]) {

        [self closePopover:sender];

    } else {

        [self showPopover:sender];

    }

}






/**popover로 사용할 viewcontoller의 storyboard outlet에 webview 바로 올리면 안나올수도 있음**/

반응형

'MacOS > objective-c' 카테고리의 다른 글

osx mkmapview 활용  (0) 2018.12.14
맥 키보드 입력 받기  (0) 2018.12.14
맥 파일 드래그 엔 드롭 뷰 만들기  (0) 2018.12.14
블로그 이미지

앱스페이스

,