gpt4 book ai didi

macos - NSButton 在自定义 NSCell 内绘制,但实际上不可单击

转载 作者:行者123 更新时间:2023-12-03 17:15:01 29 4
gpt4 key购买 nike

我有一个 NSTableView,其中包含我的自定义 NSCell 子类 IconCell。

IconCell 包含三个元素:图像、文本和按钮。

这是我的绘图代码的简化版本(closeButton 是按钮):

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
NSPoint cellPoint = cellFrame.origin;

[controlView lockFocus];

CGFloat buttonWidth = [closeButton frame].size.width;

[someNSImage drawInRect:NSMakeRect(cellPoint.x, cellPoint.y, ICON_WIDTH, ICON_HEIGHT) fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0 respectFlipped:YES hints:nil];
[someNSString drawInRect:NSMakeRect(cellPoint.x+ICON_WIDTH+PADDING, cellPoint.y, cellFrame.size.width - ICON_WIDTH - buttonWidth, cellFrame.size.height) withAttributes:someTextAttributes];
[(NSButtonCell*)[closeButton cell] drawWithFrame:NSMakeRect(cellPoint.x + cellFrame.size.width - buttonWidth, cellPoint.y, buttonWidth, cellFrame.size.height) inView:controlView];

[controlView unlockFocus];
}

绘图部分工作正常并生成如下内容:

cell screenshot

这就是我想要的。

此外,我希望当用户与单元格交互时发生以下两件事之一:如果用户单击单元格上的任何位置(关闭按钮除外),它应该执行 actionA。如果用户单击关闭按钮,则应该执行 actionB

我遇到的问题是关闭按钮似乎“不可见”——如果我单击它,它不会移动(而工作按钮应该显示其按下状态),并且通常它的行为如下如果不存在,则触发 actionA 而不是 actionB

这就是我设置两个操作的方式:

[tableView setAction:@selector(actionA)];

[closeButton setAction:@selector(actionB)];

我做错了什么?

最佳答案

您只是在单元格中绘制按钮的图片。这与将实际按钮放入单元格中不同。

单元格不是完整 View ,因此这比您一开始想象的要复杂。如果您确实必须对单元格执行此操作,请参阅此处:NSButtonCell inside custom NSCell .

但是...如果您可以将自己限制在 10.7+,他们添加了基于 View 的表格 View 。这些要简单得多,因为您可以将完整的 NSButton 放入 NSTableViewCellView 中。 Table View Programming Guide 对此进行了解释。 。如果您可以将自己限制在 10.7+,强烈推荐。

关于macos - NSButton 在自定义 NSCell 内绘制,但实际上不可单击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9475814/

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