我是可可开发公司的新手,所以我不太清楚它的许多概念.我正在尝试构建一个简单的应用程序,它将使用Flickr检索用户的照片集并在NSCollectionView中显示它们,通过单击它们,将开始下载照片集的照片。
我正在使用Xcode 5.0.1和最新的SDK,即10.9
在阅读了一些关于如何使用绑定处理NSCollectionView的文章之后,我现在面临着另一个关于在NSCollectionViewItem中处理事件的问题。
根据我的理解,鼠标事件可以很容易地通过实现来处理。
-(void) mouseDown:(NSEvent *)theEvent在NSView子类中,例如
@interface MyViewController : NSView {
}并将视图自定义类分配给我在InterfaceBuilder中创建的子类(InterfaceBuilder)。
现在,我没有问题要像上面这样做了,而且在大多数小部件中,按预期的方式处理了鼠标。问题是,我有一个NSCollectionViewItem子类,如下所示:
@interface MyItemController : NSCollectionViewItem {
}我试图在那里实现mousedown方法,这个类在一个分离的nib文件中被设置为file的所有者。当NSCollectionView加载时,视图将自动加载。
现在,MyItemController不能作为IB视图对象中的customer类,这显然是因为它不是一个NSView子类,而是一个NSCollectionViewItem子类。
如果我编写了一个NSView的子类,并使视图对象的自定义类,我可以得到鼠标向下。但是,在这种方法中,我无法获得representedObject和NSMutableArray索引,它们是我需要的基本信息。
因此,我的问题是,如何正确地处理NSCollectionViewItem的鼠标事件视图?我在GitHub中的代码如下:
https://github.com/jasonlu/flickerBackupTool
谢谢!
更新
我发现了一种解决这个问题的方法是通过子类NSView并实现鼠标下来,并使用超级视图、子视图来获取和索引以及数组本身。
- (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]);
}这似乎很有效,但如果这是最佳实践,我不会起诉,它看起来依赖于太多的视图,并且花了很长的时间才到达数组。
发布于 2014-01-12 01:26:45
我不认为NSCollectionView总是创建所有子视图(远离查看区域的子视图可能会被延迟和/或重用)。因此,我不会依赖于子视图搜索。
重载NSViewController以创建NSView,以便分配给NSViewController的representedObject可以从NSView访问。在那里,您可以搜索实际内容以确定索引。
重载NSCollectionView并在视图创建期间记录实际索引可能不太好,因为被删除的项可能是doesNot重新创建任何视图。
https://stackoverflow.com/questions/19919093
复制相似问题