可可 – NSTableView:检测与行和列一起的鼠标点击

可可 – NSTableView:检测与行和列一起的鼠标点击,第1张

概述我试图检测在NSTableView中什么时候发生鼠标点击,如果是这样,确定单击的单元格的行和列. 到目前为止,我试图使用NSTableViewSelectionDidChangeNotification,但是有两个问题: >它只会在选择更改时触发,而我希望每次鼠标点击,即使它在当前选定的行. >当我的委托被调用时,NSTableView的clickedRow和clickedColumn属性都是-1 我试图检测在NStableVIEw中什么时候发生鼠标点击,如果是这样,确定单击的单元格的行和列.

到目前为止,我试图使用NStableVIEwSelectionDIDChangeNotification,但是有两个问题:

>它只会在选择更改时触发,而我希望每次鼠标点击,即使它在当前选定的行.
>当我的委托被调用时,NStableVIEw的clickedRow和clickedColumn属性都是-1.

有没有更好的(和正确的)这样做的方式?

解决方法 捕获用户点击一行(仅当用户单击一行时,不是以编程方式选择):

将NStableVIEw子类化并声明一个协议

MytableVIEw.h

@protocol ExtendedtableVIEwDelegate <NSObject>- (voID)tableVIEw:(NStableVIEw *)tableVIEw dIDClickedRow:(NSInteger)row;@end@interface MytableVIEw : NStableVIEw@property (nonatomic,weak) ID<ExtendedtableVIEwDelegate> extendedDelegate;@end

MytableVIEw.m

处理鼠标事件(注意,当用户点击外部时不会调用委托回调,也许您也想处理这种情况,在这种情况下,只需注释掉条件“if(clickedRow!= -1)”)

- (voID)mouseDown:(NSEvent *)theEvent {    NSPoint globalLocation = [theEvent locationInWindow];    NSPoint localLocation = [self convertPoint:globalLocation fromVIEw:nil];    NSInteger clickedRow = [self rowAtPoint:localLocation];    [super mouseDown:theEvent];    if (clickedRow != -1) {        [self.extendedDelegate tableVIEw:self dIDClickedRow:clickedRow];    }}

使您的WC,VC符合ExtendedtableVIEwDelegate.

@interface MyVIEwController : documentBaseVIEwController<ExtendedtableVIEwDelegate,NStableVIEwDelegate,NStableVIEwDataSource>

将MytableVIEw的extendedDelegate设置为您的WC,VC(MyVIEwController)

在MytableVIEw.m的某个地方

self.mytableVIEw.extendedDelegate = self

在委托(MyVIEwController.m)中实现回调

- (voID)tableVIEw:(NStableVIEw *)tableVIEw dIDClickedRow:(NSInteger)row {    // have fun}
总结

以上是内存溢出为你收集整理的可可 – NSTableView:检测与行和列一起的鼠标点击全部内容,希望文章能够帮你解决可可 – NSTableView:检测与行和列一起的鼠标点击所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1029269.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存