gpt4 book ai didi

cocoa - 单击 NSCollectionViewItem View

转载 作者:行者123 更新时间:2023-12-03 17:40:00 24 4
gpt4 key购买 nike

我是 Cocoa 开发的新手,它的很多概念我都不清楚......我正在尝试构建一个简单的应用程序,它将使用 Flickr API 检索用户照片集并将其显示在 NSCollectionView 中,通过单击它们,将开始下载照片集的照片。

我正在使用 Xcode 5.0.1 和最新的 SDK 10.9

在阅读了一些有关如何使用绑定(bind)来处理 NSCollectionView 的文章后,我现在面临着另一个关于处理 NSCollectionViewItem 中的事件的问题。

据我了解,鼠标事件可以通过实现轻松处理

-(void) mouseDown:(NSEvent *)theEvent

在 NSView 子类中,比如说

@interface MyViewController : NSView {
}

并将 View 自定义类分配给我在InterfaceBuilder中创建的子类(MyViewController)。

现在,我按照上面的操作没有问题,并且 mousedown 确实在大多数小部件中按预期处理。问题是,我有一个 NSCollectionViewItem 子类,如下所示:

@interface MyItemController : NSCollectionViewItem {
}

我正在尝试在那里实现 mousedown 方法,该类被设置为单独的 nib 文件中的文件所有者。当 NSCollectionView 加载时, View 将自动加载。

现在,MyItemController 不能作为 IB 中 View 对象中的客户类,这显然是因为它不是 NSView 子类,而是 NSCollectionViewItem 子类。

如果我编写 NSView 的子类并制作 View 对象的自定义类,我可以获得 mousedown。但是,我无法通过这种方法获取 NSMutableArray 的representedObject 和索引,而它们是我需要的基本信息。

所以我的问题是,处理 NSCollectionViewItem 的鼠标事件 View 的正确方法是什么?我在 GitHub 中的代码在这里:

https://github.com/jasonlu/flickerBackupTool

谢谢!

更新

我发现解决这个问题的方法是通过子类化 NSView 并实现 mousedown 并使用 super、 subview 来获取和索引以及数组本身

- (void)mouseDown:(NSEvent *)theEvent  {
NSCollectionView *myCollectionView = (NSCollectionView *)[self superview];
NSInteger index = [[myCollectionView subviews] indexOfObject:self];
NSLog(@"collection view super view: %@",myCollectionView);
NSLog(@"collection index: %ld",index);
NSLog(@"array: %@", [[myCollectionView content] objectAtIndex:index]);
}

这似乎可行,但我不起诉这是否是最佳实践,它看起来过于依赖 View ,并且花了很长的路才能到达数组。

最佳答案

我不敢打赌 NSCollectionView 总是创建所有 subview (远离查看区域的 subview 可能会被延迟和/或重用)。因此,我不会依赖 subview 搜索。

重载NSViewController来创建一个NSView,以便可以从NSView访问分配给NSViewController的representedObject。从那里您可以搜索实际内容以确定索引。

在 View 创建期间重载 NSCollectionView 并记录实际索引可能效果不佳,因为删除的项目可能不会重新创建任何 View 。

关于cocoa - 单击 NSCollectionViewItem View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19919093/

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