.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 |