gpt4 book ai didi

Cocoa - 如何区分 NSTableView 内的单击和滚动(连续按下向上/向下键)

转载 作者:行者123 更新时间:2023-12-03 17:22:25 24 4
gpt4 key购买 nike

我想在 NSTableView 中选择特定记录时触发查询,而不是当用户通过连续按向上/向下按钮向下滚动或向上滚动以到达记录时触发查询。

我当前的实现是

if ([notification object] == myTableView)
{
if ([myTableView selectedRow] >= 0) {
myCont = [[MyController alloc] init];
if([[detailsView subviews]count]>0)
[detailsView removeAllSubviews];
NSRect frameRect = [[scDetailsViewController view] frame];
frameRect.size.height = [detailsView frame].size.height;
frameRect.size.width = [detailsView frame].size.width;
[[myCont view] setFrame:frameRect];
[detailsView addSubview:[myCont view]];
//Firing the Query
[myCont populateDetails :[[self myList] entityAt:[myTableView selectedRow]]];
}
}

但是通过这种方式,即使长时间按下向上/向下按键,查询也会被触发,这是不符合预期的。

有什么方法可以像邮件应用程序一样区分 NSTableView 中的单击和滚动(连续按下向上/向下键)。

最佳答案

刚刚在 tableViewSelectionDidChange 方法中编写了以下代码,几乎可以完美运行。

- (void)tableViewSelectionDidChange:(NSNotification *)notification
{
if ([notification object] == myTableView)
{
NSTimeInterval delayInterval = 0.0;
NSEvent *event = [NSApp currentEvent];
if(event != nil && [event type] == NSKeyDown && [event isARepeat])
{
NSLog(@"Long press of UP and DOWn arrow key.");
delayInterval = [NSEvent keyRepeatInterval] + 0.01;
}
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(myMethod) object:nil];
[self performSelector:@selector(myMethod) withObject:nil afterDelay:delayInterval];
}
else
{
if ([[detailsView subviews] count]>0)
{
[detailsView removeAllSubviews];
}
}
}

还编写了在另一个方法 myMethod 中触发查询的代码,该方法在上面的 performSelector 中被调用。

-(void) myMethod
{
if ([scenarioTableView selectedRow] >= 0) {
NSLog(@"Normal selection on table view row.");
scDetailsViewController = [[ScenarioDetailsViewController alloc] init];
if([[detailsView subviews]count]>0)
[detailsView removeAllSubviews];
NSRect frameRect = [[scDetailsViewController view] frame];
frameRect.size.height = [detailsView frame].size.height;
frameRect.size.width = [detailsView frame].size.width;
[[scDetailsViewController view] setFrame:frameRect];
[detailsView addSubview:[scDetailsViewController view]];
[scDetailsViewController populateScenarioDetails :[[self scenarioDetailsList] entityAt:[scenarioTableView selectedRow]]];
}
else {
if ([[detailsView subviews] count]>0)
{
[detailsView removeAllSubviews];
}
}
}

关于Cocoa - 如何区分 NSTableView 内的单击和滚动(连续按下向上/向下键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19241005/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com