Проблемы связывания 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
в основных данных, которые будут определять, какие строки заполняются, но я начинаю здесь).
- Я пытаюсь прототип
NSStringPboardType
прикрепленный к четыремNSTextFields
это будет перетаскиваемым. Нет кости. - Я могу сделать мой
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
вещи, так что любая помощь будет оценена.