当我右键单击我的表格视图标题 (NSTableHeaderView) 时,我会弹出一个菜单以允许用户更改列颜色。问题是我不知道他们只是“右键单击”了哪一列。关于如何做到这一点的任何想法?谢谢你。
问问题
438 次
2 回答
1
最简单的方法是-menuForEvent:
在NSTableHeaderView
.
在我的应用程序中,我使用了更通用的解决方案。我向 NSTableHeaderView 添加了一个委托。当请求菜单时,我的班级要求代表验证菜单并将单击的表格列传递给它。然后委托自定义菜单(启用菜单项,根据单击的列设置菜单项状态),并记住在实例变量中单击了哪个列。
PGETableViewTableHeaderView.h
#import <Cocoa/Cocoa.h>
@protocol PGETableViewTableHeaderViewDelegate <NSObject>
-(void)validateMenu:(NSMenu*)menu forTableColumn:(NSTableColumn*)tableColumn;
@end
@interface PGETableViewTableHeaderView : NSTableHeaderView
@property(weak) IBOutlet id<PGETableViewTableHeaderViewDelegate> delegate;
@end
PGETableViewTableHeaderView.m
#import "PGETableViewTableHeaderView.h"
@implementation PGETableViewTableHeaderView
-(NSMenu *)menuForEvent:(NSEvent *)event {
NSInteger clickedColumn = [self columnAtPoint:[self convertPoint:event.locationInWindow fromView:nil]];
NSTableColumn *tableColumn = clickedColumn != -1 ? self.tableView.tableColumns[clickedColumn] : nil;
NSMenu *menu = self.menu;
[self.delegate validateMenu:menu forTableColumn:tableColumn];
return menu;
}
@end
这很方便:将自定义子类分配给 IB 中的标题视图,然后连接menu
和delegate
插座。
于 2014-05-18T15:36:14.657 回答
0
一种方法是在自定义 NSTableHeaderView 类中覆盖 rightMouseDown:
-(void)rightMouseDown:(NSEvent *)theEvent {
NSPoint p = [self convertPoint:theEvent.locationInWindow fromView:nil];
NSInteger selCol = [self columnAtPoint:p];
NSLog(@"Clicked on header cell is in column: %ld",selCol);
}
于 2013-03-10T06:10:55.817 回答