Я пытаюсь настроить очень простое перетаскивание для моего NSTableView. Табличное представление имеет один столбец (с пользовательской ячейкой). Столбец привязан к NSArrayController, а массив содержимого контроллера массива привязан к NSArray на моем объекте контроллера. Данные отлично отображаются в таблице. Я подключил выходы dataSource
и delegate
табличного представления к своему объекту контроллера, а затем реализовал эти методы:
- (BOOL)tableView:(NSTableView *)aTableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pboard
{
NSLog(@"dragging");
return YES;
}
- (NSDragOperation)tableView:(NSTableView*)tv validateDrop:(id <NSDraggingInfo>)info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)op
{
return NSDragOperationEvery;
}
- (BOOL)tableView:(NSTableView *)aTableView acceptDrop:(id <NSDraggingInfo>)info
row:(NSInteger)row dropOperation:(NSTableViewDropOperation)operation
{
return YES;
}
Я также зарегистрировал типы перетаскивания в -awakeFromNib
:
#define MyDragType @"MyDragType"
- (void)awakeFromNib
{
[super awakeFromNib];
[_myTable registerForDraggedTypes:[NSArray arrayWithObjects:MyDragType, nil]];
}
Проблема в том, что -tableView: writeRowsWithIndexes: toPasteboard: метод никогда не вызывается . Я посмотрел на несколько примеров, и я не могу понять, что я делаю неправильно. Может ли быть проблема в том, что я использую собственную ячейку? Что-то, что я должен переопределить в подклассе ячейки, чтобы включить эту функцию?
РЕДАКТИРОВАТЬ: Подтверждено. Переключение пользовательской ячейки для обычного NSTextFieldCell сделало работу перетаскивания. Теперь, как мне сделать так, чтобы перетаскивание работало с моей пользовательской ячейкой ?