首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制NSStatusItem重绘

强制NSStatusItem重绘
EN

Stack Overflow用户
提问于 2020-08-20 14:23:34
回答 1查看 115关注 0票数 2

我创建了一个NSStatusItem并添加了一个图像。添加图像后,更改image.template属性对图标不会立即生效。只有在单击状态项之后,图像才会成为模板。有没有办法强制系统重新绘制状态项/栏?

我把这个简单的例子放在一起,按下“test”按钮将图像更改为模板,但更改直到选择状态图标后才会生效。

代码语言:javascript
复制
-(void)awakeFromNib{
    // Setup status item
    statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength];
    statusMenu = [[NSMenu alloc] initWithTitle:@""];
    menuItem = [[NSMenuItem alloc] initWithTitle:@"test"
                                   action:nil
                                   keyEquivalent:@""];
    
    NSImage* img = [NSImage imageNamed:@"aubergine.png"];
    img.template = true;
    img.size = NSMakeSize(18.0, 18.0);
    statusItem.button.image = img;
    
    [statusItem setMenu:statusMenu];
    [statusMenu addItem:menuItem];

    // Add button to window
    NSButton* button = [[NSButton alloc] initWithFrame:NSMakeRect(10, 10, 50, 20)];
    [[window contentView] addSubview: button];
    [button setTitle: @"Test"];
    
    [button setTarget:self];
    [button setAction:@selector(buttonPressed)];
}

-(void)buttonPressed {
    [[[statusItem button] image] setTemplate: false];
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-05 03:55:41

正如Willeke在注释中提供的,解决方案是使用needsDisplay属性。工作功能是:

代码语言:javascript
复制
-(void)buttonPressed {
    [[[statusItem button] image] setTemplate: false];
    [[statusItem button] setNeedsDisplay: true];
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63499391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档