gpt4 book ai didi

objective-c - 使用拖放重新排列时,小圆线条卡在 NSOutlineView 顶部

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

我有 NSOutlineView,目前仅列出根项目的子项。一切正常,除了当我尝试使用拖放重新排列项目时。前面带有圆圈的线始终位于顶行上方,并且当需要在其他项目之间拖动它们时,它们不会跟随我的项目。但是,我仍然可以正确地获取索引位置,因此我仍然可以在数据源中正确地重新排列它们。我不想通过将项目相互拖动来重新排列项目,我只想重新排列根级别之外的项目(如 Mac 上的 VLC 播放列表)。

这是我所需的四种方法:

//queue is a C-based data structure

-(NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item
{
if(item == nil){
return queue.count; //each list item
}else{
return 0; //no children of each list item allowed
}
}

-(id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item
{
if(item != nil) return nil;

return [[NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithLong:index],@"index",
[NSString stringWithFormat:@"%s",queue.item[index].filepath],@"filePath",
nil] copy];
}

-(BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item
{
if(item == nil){
return YES;
}else{
return NO;
}
}

-(id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item
{
if(item == nil) return nil;

return [item objectForKey:[tableColumn identifier]];
}

以及我的拖动方法:

-(BOOL)outlineView:(NSOutlineView *)outlineView writeItems:(NSArray *)items toPasteboard:(NSPasteboard *)pasteboard
{
[pasteboard declareTypes:[NSArray arrayWithObject:LOCAL_REORDER_PASTEBOARD_TYPE] owner:self];
[pasteboard setData:[NSData data] forType:LOCAL_REORDER_PASTEBOARD_TYPE];
return YES;
}

-(NSDragOperation)outlineView:(NSOutlineView *)outlineView validateDrop:(id <NSDraggingInfo>)info proposedItem:(id)item proposedChildIndex:(NSInteger)index
{
NSUInteger op = NSDragOperationNone;

if(index != NSOutlineViewDropOnItemIndex){
op = NSDragOperationMove;
}
return op;
}

最佳答案

我对你想要的行为有点困惑。此示例项目是否实现了所需的拖放突出显示行为(它在每行之间显示了 o–––––– 指示符,这就是 VLC 在我这里的工作方式):

http://www.markdouma.com/developer/NSOutlineViewFinagler.zip

(请注意,它不包含实际执行项目重新排序的代码)。

如果没有,您能否再次描述一下它目前正在做什么以及您希望它做什么?

此外,您没有在此处添加代码,但您是否确保注册了 LOCAL_REORDER_PASTEBOARD_TYPE 拖动类型的大纲 View ?我会在 awakeFromNib 中执行此操作:

- (void)awakeFromNib {
[self.outlineView registerForDraggedTypes:@[LOCAL_REORDER_PASTEBOARD_TYPE]];
}

这对于大纲 View 允许自己成为拖动目标是必要的。

关于objective-c - 使用拖放重新排列时,小圆线条卡在 NSOutlineView 顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15593387/

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