1

我有一个 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];
}

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

单元格截图

这就是我想要的。

此外,我希望在用户与单元格交互时发生两件事之一:如果用户单击单元格上的任何位置,除了关闭按钮,它应该这样做actionA。如果用户点击关闭按钮,它应该这样做actionB

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

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

[tableView setAction:@selector(actionA)];

[closeButton setAction:@selector(actionB)];

我究竟做错了什么?

4

1 回答 1

1

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

单元格不是完整的视图,因此这比您最初想象的要复杂。如果您真的必须对单元格执行此操作,请在此处进行说明:NSButtonCell inside custom NSCell

但是...如果您可以将自己限制在 10.7+,他们已经添加了基于视图的表格视图。这些要简单得多,因为您可以NSButtonNSTableViewCellView. 这在Table View Programming Guide中有解释。如果您可以将自己限制在 10.7+,强烈推荐。

于 2012-02-28T03:40:22.980 回答