我正试图建立一个带有标签界面的基本应用程序,自从我完成任何可可开发已经有几年了,所以我生锈了...我的应用程序将使用标签,并显示默认值加载标签时的项目视图,允许您单击其中一个项目以在该项目的视图中交换(想想镀铬,当您打开新标签并显示您可以点击打开的最喜欢的网站时) 。
目前,我已经在界面构建器中实现了基本的单窗口UI。一个带有NSCollectionView的窗口,在我的窗口控制器中使用与ArrayController和NSMutableArray集合项的绑定。效果很好。
有两件事,但是,我不确定,这让我想知道我是不是更好地在这里以编程方式做事而不是搞乱Interface Builder。具体来说,这两件事我不知道该怎么做:
对于#1我真的没有看到很好的方法来做到这一点。我可以在窗口控制器中捕获mouseDown,但我不知道如何将其映射回模型。我还为我的集合视图项创建了一个NSView子类,但是我无法找到将该视图映射到模型的方法......
对于#2,除了以编程方式创建视图之外,我认为没有很好的方法可以做到这一点。我唯一的另一个想法是将视图放在另一个.xib中,并在需要时使用它来创建新视图。如果我能弄清楚#1 ......那么这可能会正常工作。
所以,我最好只是以编程方式创建集合视图,还是我可以在这里做些什么?
答案 0 :(得分:3)
为了别人的缘故,这就是我最终做的事情......虽然我怀疑这可能并不理想,但这有效。
我创建了一个ItemView,它是NSView的子类,并将我的Collection View Item的类设置为。然后在那堂课中我做了以下几点:
- (void) mouseDown: (NSEvent *) theEvent
{
NSCollectionView *myCollectionView = (NSCollectionView *)[self superview];
NSInteger index = [[myCollectionView subviews] indexOfObject:self];
Room *room = [[myCollectionView content] objectAtIndex:index];
AppDelegate *appD = (AppDelegate *)[[NSApplication sharedApplication]delegate];
[appD.windowController loadRoom: room];
}
答案 1 :(得分:2)
⑴NSCollectionViewItem
是NSViewController
的子类,您可以在其上设置/获取representedObject
。我总是使用它来访问底层对象。
⑵你绝对想要拆分你的XIB。每次我完成它,我发现它使我的工作变得更容易。