我有一个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)];
我做错了什么?
答案 0 :(得分:1)
您只是在单元格中绘制按钮的图片。这与将实际按钮放入单元格不同。
单元格不是完整视图,因此这比您最初想象的要复杂得多。如果您真的必须使用单元格,请在此处解释:NSButtonCell inside custom NSCell。
但是......如果你可以将自己限制在10.7以上,他们就会添加基于视图的表格视图。这些更简单,因为您可以在NSButton
内放置一个完整的NSTableViewCellView
。这在Table View Programming Guide中有解释。强烈推荐,如果你可以将自己限制在10.7 +。