到目前为止,我试图使用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:检测与行和列一起的鼠标点击所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)