我想为状态栏项目创建一个菜单,例如Tapbot的PastebotSync应用程序中看到的菜单:



有没有人有任何想法如何实现菜单顶部与顶部齐平的自定义区域?

我已经尝试/想到了一些可能的方法:


带视图的标准NSMenuItem-与菜单顶部不齐平
一些hack-ish的代码将NSWindow放置在菜单顶部的区域上-不好,因为它在关闭时不会随菜单淡出
完全放弃NSMenu并改用NSView-还没有尝试过,但是我真的不想做一些假按钮或充当NSMenuItems的东西


任何人有更好的想法或建议吗?

谢谢!

最佳答案

万一有人来找我,我在Gap above NSMenuItem custom view上发布了解决方案

这是代码:

@interface FullMenuItemView : NSView
@end

@implementation FullMenuItemView
- (void) drawRect:(NSRect)dirtyRect
{
    NSRect fullBounds = [self bounds];
    fullBounds.size.height += 4;
    [[NSBezierPath bezierPathWithRect:fullBounds] setClip];

    // Then do your drawing, for example...
    [[NSColor blueColor] set];
    NSRectFill( fullBounds );
}
@end


像这样使用它:

CGFloat menuItemHeight = 32;

NSRect viewRect = NSMakeRect(0, 0, /* width autoresizes */ 1, menuItemHeight);
NSView *menuItemView = [[[FullMenuItemView alloc] initWithFrame:viewRect] autorelease];
menuItemView.autoresizingMask = NSViewWidthSizable;

yourMenuItem.view = menuItemView;

关于cocoa - 对状态栏项的NSMenu进行反向工程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4064386/

10-12 00:48