У меня есть пользовательский вид состояния, для которого я установил свойство представления элемента состояния.
- (id)initWithStatusItem:(NSStatusItem *)statusItem
{
CGFloat itemWidth = [statusItem length];
CGFloat itemHeight = [[NSStatusBar systemStatusBar] thickness];
NSRect itemRect = NSMakeRect(0.0, 0.0, itemWidth, itemHeight);
self = [super initWithFrame:itemRect];
//isReachable = YES;
if (self != nil) {
_statusItem = statusItem;
_statusItem.view = self;
[self checkReachability];
}
return self;
}
- (void)drawRect:(NSRect)dirtyRect
{
NSColor *tintColor = [NSColor blackColor];
tintColor = (!_isReachable)?[NSColor grayColor]:(self.isHighlighted?[NSColor whiteColor]:([self isDarkStyle]?[NSColor whiteColor]:[NSColor blackColor]));
self.image = [[NSImage imageNamed:@"icn_statusitem"] imageTintedWithColor:tintColor];
[self.statusItem drawStatusBarBackgroundInRect:dirtyRect withHighlight:self.isHighlighted];
NSImage *icon = self.image;
NSSize iconSize = [icon size];
NSRect bounds = self.bounds;
CGFloat iconX = roundf((NSWidth(bounds) - iconSize.width) / 2);
CGFloat iconY = roundf((NSHeight(bounds) - iconSize.height) / 2);
NSPoint iconPoint = NSMakePoint(iconX, iconY);
[icon drawAtPoint:iconPoint fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
//[self checkReachability];
}
Я инициализировал здесь строку состояния, когда она запускается, представляет значок в элементе состояния.после получения уведомления statusSpeedNotification
я хочу изменить изображение элемента статуса на строку.я пробовал это не работает
- (id)init
{
self = [super init];
if (self != nil)
{
// Install status item into the menu bar
statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength];
_statusItemView = [[StatusItemView alloc] initWithStatusItem:statusItem];
_statusItemView.image = [NSImage imageNamed:@"icn_statusitem"];
_statusItemView.alternateImage = [NSImage imageNamed:@"icn_statusitem"];
_statusItemView.action = @selector(togglePanel:);
[[NSNotificationCenter defaultCenter] addObserverForName:@"statusSpeedNotification" object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) {
NSString *speed = note.userInfo[@"speed"];
_statusItemView.image= nil;
_statusItemView.alternateImage = nil;
statusItem.button.title = speed;
}];
}
return self;
}
Любые предложения будут более полезными.