gpt4 book ai didi

cocoa - 以编程方式向 NSWindow 添加关闭按钮

转载 作者:行者123 更新时间:2023-12-03 16:15:44 24 4
gpt4 key购买 nike

我想以编程方式向 NSWindow 添加关闭按钮。我可以显示按钮,但没有鼠标悬停或鼠标按下效果。当我单击按钮时,我的“选择器”似乎从未被调用。我不太确定出了什么问题以及为什么这如此烦人。

这是我一直在搞乱的内容:

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];

主题框架的位置:[[self contentView] superview] 只需将按钮添加到[self contentView]即可,但我希望将其添加到标题栏.

请不要使用界面生成器...

最佳答案

潜在问题#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];
}

关于cocoa - 以编程方式向 NSWindow 添加关闭按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11183287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com