【问题标题】:Make NSCollectionViewItems re-arrangeable within NSCollectionView使 NSCollectionViewItems 在 NSCollectionView 中可重新排列
【发布时间】:2013-01-24 14:04:04
【问题描述】:

过去三天我一直在尝试创建一个包含 4 个图标的单行,您可以通过拖动来重新排列它们。我尝试了很多不同的方法,到目前为止 NSCollectionView 是最好的方法。我现在可以通过编程方式创建 NSCollectionView 并使用 NSArray 向其中添加项目。但是,我仍然无法重新排列图标/NSCollectionViewItems。我现在很困惑,希望你们中的一个人能指出我正确的方向。

我在 stackoverflow(以及整个互联网)上阅读了很多类似的问题。很明显我需要从 NSCollectionViewDelegate 添加方法:

- (BOOL)collectionView:(NSCollectionView *)collectionView writeItemsAtIndexes:(NSIndexSet     *)indexes toPasteboard:(NSPasteboard *)pasteboard

-(BOOL)collectionView:(NSCollectionView *)collectionView canDragItemsAtIndexes:(NSIndexSet *)indexes withEvent:(NSEvent*)event

-(BOOL)collectionView:(NSCollectionView *)collectionView acceptDrop:(id < NSDraggingInfo >)draggingInfo index:(NSInteger)index dropOperation:(NSCollectionViewDropOperation)dropOperation

-(NSDragOperation)collectionView:(NSCollectionView *)collectionView validateDrop:(id < NSDraggingInfo >)draggingInfo proposedIndex:(NSInteger *)proposedDropIndex dropOperation:(NSCollectionViewDropOperation *)proposedDropOperation

-(NSArray *)collectionView:(NSCollectionView *)collectionView namesOfPromisedFilesDroppedAtDestination:(NSURL *)dropURL forDraggedItemsAtIndexes:(NSIndexSet *)indexes

我已将这些(带有返回值)添加到我的 NSCollectionView 子类中,但我仍然一无所获。所以我现在的问题是:我应该创建一个 NSCollectionViewDelegate 的子类并在那里覆盖这些方法吗?

但这真的是朝着正确的方向发展吗? (您可能已经注意到,我是 Cocoa 初学者,所以我现在很迷茫,因为我发现 NSCollectionView 类非常混乱。)

提前致谢, 弗兰斯

【问题讨论】:

    标签: macos cocoa


    【解决方案1】:

    这不属于子类。您将在委托中实现这一点(通常是向集合视图提供内容的控制器)。将控制器设置为集合视图的委托(它要求做出决策的对象)并在该控制器中实现这些方法。

    Some very important reading.

    【讨论】:

    • 谢谢,我现在已经在我的委托中实现了上面的前 4 个方法。前 3 个都返回 YES,第 4 个返回 NSDragOperationMove。 canDragItemsAtIndexes 是唯一被调用的方法。有没有我可以学习的教程,我可以学习用什么来填充这些方法? (除了return语句)
    • 我找到了stackoverflow.com/questions/5825833/… 并添加了 registerForDraggedTypes ,我几乎可以使用它了。我可以移动这些物品,它们还没有固定在新位置。我想这不是太难。全部完成后,我会将项目发布到网络上
    • 发布您的代码 - 听起来您没有重新排列控制器为响应提议的丢弃而提供的内容(也许您没有验证它;也许您没有“接受”并且重新排序)。它不会为您执行此操作,因为由您(而不是您的控制器)决定它的含义(因为也许您不想允许这个或那个)。
    猜你喜欢
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 2021-11-21
    • 2017-09-30
    相关资源
    最近更新 更多