首先我们来看看我们在使用NSTableview
列表的问题
- 首先
NSTableview
有一个点击回调的通知NSTableViewSelectionDidChangeNotification
,但是这个通知只有选中变化的时候调用 -
tableViewSelectionDidChange:(NSNotification *)notification
,这个就是上面的那个通知回调方法
解决:思路是判断点击的位置
- 自定义一个
NSTableview
,添加代理方法
@protocol SHCustomTableViewDelegate <NSObject>
@required
- (void)tableView:(NSTableView *)tableView didClickIndexPath:(NSIndexPath *)indexPath;
@end
@interface SHCustomTableView : NSTableView
@property (nonatomic , weak) id<SHCustomTableViewDelegate> extendedDelegate;
@end
- 获取鼠标点击的坐标进行判断
#import "SHCustomTableView.h"
@implementation SHCustomTableView
- (void)mouseDown:(NSEvent *)event
{
NSPoint globalLocation = [event locationInWindow];
NSPoint localLocation = [self convertPoint:globalLocation fromView:nil];
NSInteger clickColumn = [self columnAtPoint:localLocation];
NSInteger clickRow = [self rowAtPoint:localLocation];
[super mouseDown:event];
if (clickRow != -1) {
[self.extendedDelegate tableView:self didClickIndexPath:[NSIndexPath indexPathForItem:clickRow inSection:clickColumn]];
}
}
@end
- 使用
- 遵守协议
@interface SHHomeWorkViewController ()<NSTableViewDelegate,
NSTableViewDataSource,
SHCustomTableViewDelegate>
- 设置代理
_tableView.extendedDelegate = self;
- 实现方法
- (void)tableView:(NSTableView *)tableView didClickIndexPath:(NSIndexPath *)indexPath
{
//do something
}
完成
网友评论