- (BOOL) imageBrowser:(IKImageBrowserView *) aBrowser moveItemsAtIndexes: (NSIndexSet *)indexes toIndex:(NSUInteger)destinationIndex;
未调用IKImageBrowserView
中重新排序的数据源方法。笔尖连接已正确完成。 setAllowsReorderdering
设置为YES。
但它还没有发挥作用。
- (void)imageBrowser:(IKImageBrowserView *)aBrowser removeItemsAtIndexes:(NSIndexSet *)indexes
同时,上述删除项目的方法被正确调用并且完美地运行。为什么不重新排序?
当我拖动项目进行重新排序时,将调用以下拖放代码。这里实际上有2个IKImageBrowserViews。
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
{
NSPoint draggingLocation = [self convertPoint:[sender draggingLocation] fromView:nil];
NSRect contentRect = [[_indexContentBrowserView enclosingScrollView] frame];
BOOL isForContent = (contentRect.origin.x < draggingLocation.x) && (draggingLocation.x < contentRect.origin.x + contentRect.size.width);
if (isForContent)
{
if ([sender draggingSource] == _indexContentBrowserView)
{
return NSDragOperationMove;
}
else
{
NSPasteboard *pb = [sender draggingPasteboard];
NSString * type = [pb availableTypeFromArray:[NSArray arrayWithObject:NSFilenamesPboardType]];
if(type != nil)
{
return NSDragOperationEvery;
}
}
}
else
{
if ([sender draggingSource] == _indexListBrowserView)
{
return NSDragOperationMove;
}
else
{
NSPasteboard *pb = [sender draggingPasteboard];
NSString * type = [pb availableTypeFromArray:[NSArray arrayWithObject:NSFilenamesPboardType]];
if(type != nil)
{
return NSDragOperationEvery;
}
}
}
return NSDragOperationNone;
}
答案 0 :(得分:1)
- (BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender
{
[super prepareForDragOperation:sender];
if(nil == [sender draggingSource])
return YES;
BOOL success = NO;
if (_galleryMultiImageFileBrowserView != [sender draggingSource])
{
//Code for checking the duplication of files
}
else
{
success = YES;
}
return success;
//I had returned NO here which was the reason for the problem.
}
我发现了问题。这是我的错。上面的代码是更正的代码。之前,当 [sender draggingSource] 是 IKImageBrowserView 时,它返回NO。这就是为什么没有调用 moveItemsAtIndexes:方法的原因。
答案 1 :(得分:0)
根据您的评论,您的问题似乎是您已经覆盖了内置的拖放功能,因此您不再“免费”重新排序。我建议在覆盖开始时调用super
实现,如下所示:
[super draggingEntered:sender];
这可能不适合你,但如果没有,我不确定会是什么。你说你确实需要拖放代码 - 这两行有两个问题:首先,你希望实现什么?第二,是否覆盖了draggingEntered:
实现这一目标的最佳/唯一方式?