如何在NSMenu打开时更新它?

Vin*_*pai 6 cocoa objective-c nsmenu nsmenuitem nsstatusbar

我有一个动态添加NSMenuItems的NSMenu.NSMenu在保持打开状态时不能正常刷新.我正在调用NSMenu更新方法NSEventTrackingRunLoopModes.

我已经实现了以下方法来更新NSMenu.

- (void)menuNeedsUpdate:(NSMenu *)menu {
for (NSInteger index = 0; index < count; index++)
    [self menu:menu updateItem:[menu itemAtIndex:index] 
                       atIndex:index 
                  shouldCancel:NO];
}

- (BOOL)menu:(NSMenu *)menu updateItem:(NSMenuItem *)item atIndex:(NSInteger)index shouldCancel:(BOOL)shouldCancel`

- (NSInteger)numberOfItemsInMenu:(NSMenu *)menu
Run Code Online (Sandbox Code Playgroud)

小智 6

我在计时器中动态填充菜单项,NSMenu在打开时不会更新.

确保在相应的运行模式下启动计时器:

[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
Run Code Online (Sandbox Code Playgroud)

你现在可能只会点火它NSDefaultRunLoopMode.


Vin*_*pai 6

更新菜单项NSEventTrackingRunLoopMode解决了这个问题。