Проблемы связывания NSDraggingSource с NSMatrix

Картина это малонаселенный NSMatrix пять цветных столбцов (0-4), с последним добавленным столбцом оранжевого цвета. Они заполняются стоящими объектами (случайными числами) с отмеченными координатами (x,y). "Пустые" ячейки имеют NULL-объекты. Это вроде работает.

У меня есть четыре источника данных (AD) вверху, которые я хочу перетащить на матрицу. Они помечены номерами, которые представляют целевые строки (0-3). Я не могу заставить их тащить, хотя я думаю, что я сделал NSDragSource правильно.

Пример поведения:

Если я перетащу ячейку B (с 0,2) в "центральную" область столбца (4,y), ее содержимое объединится с двумя пустыми ячейками (строки 0 и 2). Если я перетащу в левую или правую область столбца, я получу предварительно добавленный или добавленный столбец - в данном случае редкий.

Если я перетащу ячейку A (с 0,1,2,3) на любую ячейку, она создаст новый столбец.

Если я перетащу ячейку D в столбец (0,y) или (4,y), она объединится; перетаскивая его куда-либо еще создаст новый разреженный столбец. Делая это с C где угодно создаст новый разреженный столбец.

Как можно догадаться, это сложное поведение слияния привело меня сюда, а не, скажем, NSTableView,

У меня не так много проблем с выявлением левых / центральных / правых областей или объединением данных или созданием новых столбцов - мне нужна помощь в создании правильных NSPasteboard взаимодействия и / или NSDragging Настройка: (Я в конечном итоге хочу использовать пользовательский NSManagedObject в основных данных, которые будут определять, какие строки заполняются, но я начинаю здесь).

  1. Я пытаюсь прототип NSStringPboardType прикрепленный к четырем NSTextFields это будет перетаскиваемым. Нет кости.
  2. Я могу сделать мой NSMatrix получить строки (или NSFilenamesPboardType) из картона. Нет проблем там.

Получив соответствующую входящую ячейку (строку), я могу просмотреть ее и выяснить, следует ли объединить ее с текущим столбцом или создать новый столбец - опять же, это не проблема.

Вещи, которые я сделал...

1) Подкласс NSTextField...

@interface CellStringView : NSTextField <NSDraggingSource>

2) Зарегистрировал типы перетаскивания текстовых полей и попытался перетащить сеанс...

- (void)awakeFromNib {
    [self registerForDraggedTypes:@[NSStringPboardType]];
}

- (NSDragOperation)draggingSession:(NSDraggingSession *)session
sourceOperationMaskForDraggingContext:(NSDraggingContext)context {
    if (context == NSDraggingContextWithinApplication) {
        return NSDragOperationCopy;
    }
    else
        return NSDragOperationNone;
}

-(void)dealloc {
    [self unregisterDraggedTypes];
}

мой draggingSession:sourceOperationMaskForDraggingContext: метод никогда даже не вызывается.

Я новичок в этом NSPasteboard вещи, так что любая помощь будет оценена.

0 ответов

Другие вопросы по тегам