0
    #define MyPrivateTableViewDataType @"MyPrivateTableViewDataType"

    //add line in your awakeFormNib method
    [self.tableView registerForDraggedTypes:[NSArray arrayWithObject:MyPrivateTableViewDataType]

// This method is called
     -(BOOL)tableView:(NSTableView *)tv writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard*)pboard {
        // Copy the row numbers to the pasteboard.
        NSData *zNSIndexSetData = [NSKeyedArchiver archivedDataWithRootObject:rowIndexes];

        [pboard declareTypes:[NSArray arrayWithObject:MyPrivateTableViewDataType] owner:self];

        [pboard setData:zNSIndexSetData forType:MyPrivateTableViewDataType];

        return YES;
    }

  ***following methods are not called***


    - (NSDragOperation)tableView:(NSTableView*)tv validateDrop:(id )info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)op {
        // Add code here to validate the drop
        return NSDragOperationEvery;
    }

    - (BOOL)tableView:(NSTableView *)aTableView acceptDrop:(id )info row:(NSInteger)row dropOperation:(NSTableViewDropOperation)operation {

        NSPasteboard* pboard = [info draggingPasteboard];
        NSData* rowData = [pboard dataForType:MyPrivateTableViewDataType];
        NSIndexSet* rowIndexes = [NSKeyedUnarchiver unarchiveObjectWithData:rowData];
        NSInteger dragRow = [rowIndexes firstIndex];

        if (dragRow < row) {
            [model insertObject:[model objectAtIndex:dragRow] atIndex:row];
            [model removeObjectAtIndex:dragRow];

            [aTableView noteNumberOfRowsChanged];
            [aTableView moveRowAtIndex:dragRow toIndex:row-1];

        }else {
            ModelObj *obj = [model objectAtIndex:dragRow];
            [model removeObjectAtIndex:dragRow];
            [model insertObject:obj atIndex:row];

            [aTableView noteNumberOfRowsChanged];
            [aTableView moveRowAtIndex:dragRow toIndex:row];
        }

        return YES;
   }

我的 NSTableView 有自定义 tableViewCell ,我注册了 DraggTypes。我设置了表的委托和数据源。但在 3 种方法中,只有第一种方法-(BOOL)tableView:(NSTableView *)tv writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard*)pboard被调用。为什么不调用其他方法。

4

0 回答 0