gpt4 book ai didi

macos - 单击时自定义无边框 NSButton 行为?

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

我有一个无边框的NSButton(或多或少是一个带操作的NSTextField),我希望它的行为像“基于图像”的按钮,即我会就像按钮文本在鼠标经过和单击时改变颜色一样。有没有一种简单的方法可以实现这一目标?

这是我的按钮初始化上下文:

    NSButton* but =[[NSButton alloc] initWithFrame:NSMakeRect(5, 5, 125, 25)] ;
[but setTitle:@"Do not show Again"];
[but setButtonType:NSMomentaryLightButton]; //I figure it could be here
[but setBezelStyle:NSHelpButtonBezelStyle];
[but setBordered:NO];
[but setAction:@selector(writeToUserDefaults)];
[but setFont:[NSFont fontWithName:@"Arial" size:9.0]];
[self.view addSubview:but];

来源无效:Borderless NSButton Turns Gray

我的解决方案是什么(除了子类化 NSButton 之外?)

最佳答案

解决方案是使用 NSTrackingArea,来自 Apple 文档

NSTrackingArea 对象定义一个 View 区域,当鼠标位于该区域上方时,该区域会生成鼠标跟踪和光标更新事件。

在您的情况下,您需要设置相对于 NSButton 框架的跟踪区域,并在收到鼠标跟踪事件时更改文本颜色。

- (void)awakeFromNib:(NSWindow *)newWindow 
{
NSButton* but =[[NSButton alloc] initWithFrame:NSMakeRect(5, 5, 125, 25)] ;
[but setTitle:@"Do not show Again"];
[but setBezelStyle:NSHelpButtonBezelStyle];
[but setBordered:NO];
[but setAction:@selector(writeToUserDefaults)];
[but setFont:[NSFont fontWithName:@"Arial" size:9.0]];
[self.view addSubview:but];

NSTrackingArea* trackingArea = [[NSTrackingArea alloc] initWithRect:[but frame]
options:(NSTrackingInVisibleRect | NSTrackingEnabledDuringMouseDrag | NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways)
owner:self userInfo:nil];

[self.view addTrackingArea:trackingArea];
}

- (void) mouseEntered:(NSEvent*)theEvent {
//Set text color
}

- (void) mouseExited:(NSEvent*)theEvent {
//Reset text color
}

关于macos - 单击时自定义无边框 NSButton 行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19799864/

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