gpt4 book ai didi

drag-and-drop - 使用 NSTableView 作为拖动源的自定义拖动图像

转载 作者:行者123 更新时间:2023-12-04 06:29:29 25 4
gpt4 key购买 nike

当tableView是拖动源时,是否需要继承NSTableView或NSTableCellView来创建自定义拖动图像?

如果没有,我缺少什么神奇的方法来做到这一点?我似乎找不到任何可靠的东西。

NSTableCellView 子类可以(有点神秘地)覆盖:
@property(retain, readonly) NSArray *draggingImageComponents( NSDraggingImageComponent 实例的数组将组合在一起(谁知道它们以何种方式组合...))

NSTableView 本身有
- (NSImage *)dragImageForRowsWithIndexes:(NSIndexSet *)dragRows tableColumns:(NSArray *)tableColumns event:(NSEvent *)dragEvent offset:(NSPointPointer)dragImageOffset
但这些似乎确实是子类化选项。

有人知道这里的另一种技术吗?
(10.8+ 是目标)

最佳答案

看起来好像NSTableViewCell

@property(retain, readonly) NSArray *draggingImageComponents

不会自动调用,但必须为基于 View 的表 View 显式引用。 -draggingImageComponents可以覆盖以提供用于合成拖动图像的组件。
- (void)tableView:(NSTableView *)tableView draggingSession:(NSDraggingSession *)session willBeginAtPoint:(NSPoint)screenPoint forRowIndexes:(NSIndexSet *)rowIndexes
{
// configure the drag image
// we are only dragging one item - changes will be required to handle multiple drag items
BPPopupButtonTableCellView *cellView = [self.columnsTableView viewAtColumn:0 row:rowIndexes.firstIndex makeIfNecessary:NO];
if (cellView) {

[session enumerateDraggingItemsWithOptions:NSDraggingItemEnumerationConcurrent
forView:tableView
classes:[NSArray arrayWithObject:[NSPasteboardItem class]]
searchOptions:nil
usingBlock:^(NSDraggingItem *draggingItem, NSInteger idx, BOOL *stop)
{
// we can set the drag image directly
//[draggingItem setDraggingFrame:NSMakeRect(0, 0, myWidth, myHeight) contents:myFunkyDragImage];

// the tableview will grab the entire table cell view bounds as its image by default.
// we can override NSTableCellView -draggingImageComponents
// which defaults to only including the image and text fields
draggingItem.imageComponentsProvider = ^NSArray*(void) { return cellView.draggingImageComponents;};
}];
}
}

关于drag-and-drop - 使用 NSTableView 作为拖动源的自定义拖动图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17586110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com