我想以编程方式向NSWindow
添加关闭按钮。我可以显示按钮,但没有鼠标悬停或鼠标按下效果。我和#34;选择器"我点击按钮时似乎永远不会被调用。我不确定什么是错的,为什么这太烦人了。
以下是我一直在搞乱的事情:
closeButton = [NSWindow standardWindowButton:NSWindowCloseButton forStyleMask:self.styleMask];
NSView *themeFrame = [[self contentView] superview];
NSRect c = [themeFrame frame]; // c for "container"
NSRect aV = [closeButton frame]; // aV for "accessory view"
NSRect newFrame = NSMakeRect( c.size.width - aV.size.width - 5, // x position c.size.height - aV.size.height - 5, // y position aV.size.width, // width aV.size.height); // height
[closeButton setFrame:newFrame];
[themeFrame addSubview:closeButton];
[closeButton setAutoresizingMask:NSViewMaxXMargin | NSViewMinYMargin];
[closeButton setEnabled:YES];
[closeButton setTarget:self];
[closeButton setAction:NSSelectorFromString(@"testClick:") ];
在哪里" testClick"只是我班级的一个重要功能,定义如下:
- (void)testClick:(id)sender
问题似乎是呼吁:
[themeFrame addSubview:closeButton];
其中themeFrame为:[[self contentView] superview]
只需将按钮添加到[self contentView]
即可,但我希望将其添加到标题栏。
请不要使用Interface Builder
答案 0 :(得分:0)
潜在问题#1)
您拨打“NSSelectorFromString
”的方式对我来说似乎不对。我不认为你可以在Objective C中通过这种方式传递参数。
试试这个:
[closeButton setAction: @selector(closeWindow:)];
并创建一个新的“closeWindow:
”操作,如下所示:
- (void) closeWindow: (id) sender;
关闭窗口。
潜在问题#2)
而不是:
closeButton = [NSWindow standardWindowButton:NSWindowCloseButton forStyleMask:self.styleMask];
NSView *themeFrame = [[self contentView] superview];
为什么不使用:
NSWindow * parentWindow = [[self contentView] window];
if(parentWindow)
{
closeButton = [parentWindow standardWindowButton:NSWindowCloseButton forStyleMask:self.styleMask];
}