2
- (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;



}
4

2 回答 2

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:方法的原因。

@Dov:感谢 Dov 给予您宝贵的时间。非常感谢。@Joaquin:非常感谢。

于 2011-12-02T08:03:27.730 回答
0

根据您的评论,您的问题似乎是您已经覆盖了内置的拖放功能,因此您不再“免费”重新排序。我建议super在覆盖开始时调用实现,如下所示:

[super draggingEntered:sender];

这可能对你不起作用,但如果不是,我不确定会怎样。您说您确实需要拖放代码 - 这些问题有两个问题:首先,您希望实现什么?其次,压倒一切draggingEntered:是实现这一目标的最佳/唯一方法吗?

于 2011-12-01T12:49:49.173 回答