gpt4 book ai didi

objective-c - NSTableView:如何在右键单击时突出显示一个项目?

转载 作者:搜寻专家 更新时间:2023-10-30 20:26:36 24 4
gpt4 key购买 nike

我有一个 NSTableView,无需用户干预即可向其中添加项目。当用户返回到包含 NSTableView 的对话框并单击一个项目时,该项目会突出显示。但是,如果右键单击某个项目,则该项目不会突出显示。有没有办法突出显示右键单击的项目?

我目前有以下内容:

void Dialog::menuAction(ui::Menu::Item* item)
{
// Highlight the item clicked
[tableView row:item select:YES]
...
}

但这似乎行不通。

最佳答案

我的解决方案,似乎是目前为止最简洁的解决方案,是继承 NSTableView,并实现其 menuForEvent 消息。只需让您的 TableView 成为它的子类,您就会自动获得正确的行为:

@interface CustomTableView : NSTableView
@end

@implementation CustomTableView

- (NSMenu*) menuForEvent:(NSEvent*)event // override
{
// Get to row at point
NSInteger row = [self rowAtPoint:[self convertPoint:event.locationInWindow fromView:nil]];
if (row >= 0) {
// and check whether it is selected
if (NOT [self isRowSelected:row]) {
// No -> select that row
[self selectRowIndexes:[NSIndexSet indexSetWithIndex:row] byExtendingSelection:NO];
}
}
return [super menuForEvent:event];
}

@end

应该与 NSOutlineView 类似地工作。

请注意代码如何决定何时突出显示该行。这非常模仿您在 Finder 中看到的行为,例如:

  • 如果您右键单击现有的选择,尤其是当它是多个项目时,它们将保持选中状态。
  • 如果您在当前选择之外右键单击,则新单击的行将成为新选择。

然而,这并不完美:Finder 只会在用户实际使用上下文菜单中的一项时更改选择。如果用户取消弹出菜单,则选择不会改变。但是,我的代码在用户从弹出菜单中进行选择之前更改了选择。请随时对此进行改进,并在此处分享。

关于objective-c - NSTableView:如何在右键单击时突出显示一个项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7637277/

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