gpt4 book ai didi

cocoa - NSTableView 按 "space"选择行

转载 作者:行者123 更新时间:2023-12-03 16:42:46 24 4
gpt4 key购买 nike

我没有找到关于这个问题的任何信息,我想知道是否可以让 NSTableView (或子类)通过按键盘上的空格键来选择行,并通过按向上/向下键来导航行,而无需使用选择被重置。我想让 nstableview 表现得像总指挥官的文件面板,如果有人在 Windows 下使用它的话。我什至不知道从哪里开始。

最佳答案

您必须创建 NSTableView 类的子类。这是如何做到这一点的基本示例。它处理使用空格键和鼠标右键的选择,但它不处理鼠标右键拖动选择。

这个想法是在单选模式下使用 NSTableView 并实现替代选择。我们添加属性 markedRows,然后使用它代替原始的 selectedRows 属性。

FOTableView.h

#import <Cocoa/Cocoa.h>

@interface FOTableView : NSTableView

@property (strong,nonatomic) NSMutableIndexSet *markedRows;

@end

FOTableView.m

#import "FOTableView.h"

@implementation FOTableView

- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
}

return self;
}

-(NSMutableIndexSet *) markedRows
{
if (!_markedRows) {
_markedRows = [NSMutableIndexSet new];
}
return _markedRows;
}

- (void)drawRow:(NSInteger)row clipRect:(NSRect)clipRect
{
if ([self.markedRows containsIndex:row]) {
NSRect clipRect = [self rectOfRow:row];
NSColor *color = [NSColor colorWithCalibratedRed:0.932 green:0.046 blue:0.960 alpha:1.000];
[color setFill];
NSRectFill(clipRect);
}

[super drawRow:row clipRect:clipRect];
}

- (void)keyDown:(NSEvent *)theEvent
{
NSString *keyString;
unichar keyChar;

keyString = [theEvent charactersIgnoringModifiers];
keyChar = [keyString characterAtIndex:0];
NSInteger row = [self selectedRow];
switch(keyChar){
case 32:
{
if (row != -1)
{
if ([self.markedRows containsIndex:row]) {
[self.markedRows removeIndex:row];
}
else {
[self.markedRows addIndex:row];
}
}
[self selectRowIndexes:[NSIndexSet indexSetWithIndex:++row] byExtendingSelection:NO];
[self setNeedsDisplay:YES];
break;
}

default:
[super keyDown:theEvent];
}

NSLog(@"key pressed: (%hu)%@", keyChar,keyString);
}

- (void)rightMouseDown:(NSEvent *)theEvent
{
NSInteger row = [self rowAtPoint:[self convertPoint:[theEvent locationInWindow] fromView:nil]];
if ([self.markedRows containsIndex:row]) {
[self.markedRows removeIndex:row];
}
else {
[self.markedRows addIndex:row];
}

[self setNeedsDisplay:YES];
}

@end

关于cocoa - NSTableView 按 "space"选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12715826/

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