Перетаскивание из NSTableView для удаления - PullRequest
5 голосов
/ 10 октября 2011

У меня есть NSTableView, который содержит несколько предметов. Я хотел бы реализовать перетаскивание из внутри и удаление за пределами NSTableView, чтобы удалить перетаскиваемый элемент. (Вроде того, как сафари «пуф» закладывает.)

NSTableView уже настроен для поддержки переупорядочения с перетаскиванием и принимает капли из другого NSTableView в приложении, поэтому, хотя большая часть его подключена, я просто упускаю небольшой фрагмент функциональности.

Обновление:

Спасибо Шону за его помощь. Хотя я могу получать уведомления о том, что элемент был перетащен после того, как он вернулся в исходное положение (см. Комментарий к его ответу), я хотел бы получать уведомление сразу после отпускания кнопки мыши.

Текущее поведение: пользователь перетаскивает элемент, перетаскивание будет считаться «недействительным», а элемент анимируется обратно в исходное положение. Затем уведомление получено, и я могу удалить элемент, но это немного сбивает с толку (для пользователей) с точки зрения пользовательского интерфейса.

Ответы [ 2 ]

9 голосов
/ 10 октября 2011

Похоже, ваше табличное представление уже реализует протокол NSDraggingSource.В этом случае вы можете добавить метод draggedImage:endedAt:operation: (до ОС 10.7) или draggingSession:endedAtPoint:operation: (ОС 10.7), который будет предоставлять операцию NSDragOperationNone в аргументе operation, если перетаскивание не удалось.Таким образом, вы можете проверить, прошла ли эта операция, затем удалить объект и удалить его из представления, если это так.

Другими словами, это будет выглядеть примерно так (в 10.7):

-(void)draggingSession:(NSDraggingSession *)session endedAtPoint:(NSPoint)screenPoint operation:(NSDragOperation)operation {
    if (operation == NSDragOperationNone) {
        //delete object, remove from view, etc.
    }
}
4 голосов
/ 21 января 2013

Чтобы избежать перетаскивания изображения обратно в исходное положение перед удалением, вы можете установить свойство сеанса перетаскивания "animatesToStartingPositionsOnCancelOrFail" в tableView: draggingSession: willBeginAtPoint: forRowIndexes: method:

- (void)tableView:(NSTableView *)tableView draggingSession:(NSDraggingSession *)session willBeginAtPoint:(NSPoint)screenPoint forRowIndexes:(NSIndexSet *)rowIndexes {
   [session setAnimatesToStartingPositionsOnCancelOrFail:NO];
}

Однако я все еще ищу способ создания «пуфа» при удалении перетаскиваемой строки.

...