상태 표시 줄 아이콘을 클릭하면 나타나는 사용자 정의보기와 관련된 ARC 프로젝트가 있습니다. 프로그래밍에 익숙하지 않아 GitHub에서 this example project을 가져와 실행합니다. 응용 프로그램이 정상적으로 실행되지만 상태 바 항목에만 문제가 있습니다. 필자는 NSStatusItem을 설정했지만 setView를 호출하자마자 아이콘이 해제 된 것으로 보입니다. 메뉴 바에서 앱을 여는 빈 공간을 클릭하면 항목이 표시되므로 아이콘이 누락 된 것입니다. (이미지가 유효한 것으로 확인 됨). 내가 뭘 놓치고 있니?NSStatusItem 아이콘 해제
다음은 NSStatusItem 코드입니다 :
//
// WOMAppDelegate.m
// PopoverMenulet
//
// Created by Julián Romero on 10/26/11.
// Copyright (c) 2011 Wuonm Web Services S.L. All rights reserved.
//
#import "WOMAppDelegate.h"
#import "WOMMenulet.h"
#import "WOMController.h"
@implementation WOMAppDelegate
@synthesize window = _window;
@synthesize menulet;
@synthesize statusItem;
@synthesize statusImage;
@synthesize controller;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
//SET UP NSSTATUSITEM
statusImage = [NSImage imageNamed:@"basket"];
self.statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
[self.statusItem setImage:statusImage];
//[self.statusItem setHighlightMode:YES];
[self.statusItem setEnabled:YES];
self.menulet = [[WOMMenulet alloc] init]; /* square item */
self.controller = [[WOMController alloc] init];
self.menulet.delegate = controller;
[self.statusItem setView:menulet];
}
@end
그리고 여기에 참조 된 menulet 코드입니다 : 바로이 - setView:
전화로
//
// WOMMenulet.m
// PopoverMenulet
//
// Created by Julián Romero on 10/26/11.
// Copyright (c) 2011 Wuonm Web Services S.L. All rights reserved.
//
#import "WOMMenulet.h"
static void *kActiveChangedKVO = &kActiveChangedKVO;
@implementation WOMMenulet
@synthesize delegate;
- (void)setDelegate:(id<WOMMenuletDelegate>)newDelegate
{
[(NSObject *)newDelegate addObserver:self forKeyPath:@"active" options:NSKeyValueObservingOptionNew context:kActiveChangedKVO];
delegate = newDelegate;
}
- (void)mouseDown:(NSEvent *)event {
[self.delegate menuletClicked];
}
#pragma mark - KVO
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if (context == kActiveChangedKVO) {
//NSLog(@"%@", change);
[self setNeedsDisplay:YES];
}
}
@end
@Antwan은'setImage :'또는'setView :'를 수행 할 필요가 있다고 말했다. 둘 다하면'setImage :'는 무시됩니다. 'WOMMenulet' 클래스 란 무엇입니까? 이미지를 제공하는 방법을 보려면 문서를 확인해야합니다. 아마'self.menulet.image = stausImage'는 당신이 필요로하는 것입니다. –