gpt4 book ai didi

objective-c - 通过单击 NSCollectionVIew 项获取模型

转载 作者:行者123 更新时间:2023-12-03 16:25:08 30 4
gpt4 key购买 nike

我正在尝试建立一个带有选项卡式界面的基本应用程序,自从我完成任何 cocoa 开发以来已经有几年了,所以我已经生疏了......我的应用程序将使用选项卡,并显示默认值加载选项卡时的项目 View ,允许您单击其中一个项目以交换该项目的 View (想想 chrome,当您打开新选项卡时,它会显示您最喜欢的网站,您可以单击以打开) 。

目前我已经实现了一个基本的单窗口 UI,几乎完全在界面生成器中实现。带有 NSCollectionView 的窗口,在我的窗口 Controller 中使用与 ArrayController 和 NSMutableArray 集合项的绑定(bind)。效果很好。

但是,有两件事我不确定,这让我想知道我是否最好在这里以编程方式执行操作,而不是搞乱 Interface Builder。具体来说,我不知道该怎么做的两件事:

  1. 获取 NSCollectionView 上的点击事件并将其映射到被点击项目代表的模型。
  2. 在新选项卡中加载此 Collection View 的新实例(用户可以打开多个选项卡,所有选项卡都应显示项目网格)

对于#1,我真的没有找到一个很好的方法来做到这一点。我可以在窗口 Controller 中捕获 mouseDown,但我不知道如何将其映射回模型。我还为我的 Collection View 项创建了一个 NSView 子类,但是我也无法找到将该 View 映射到模型的方法...

对于#2,我认为除了以编程方式创建 View 之外,没有什么好方法可以做到这一点。我唯一的想法是将 View 放入另一个 .xib 中,并在需要时使用它来创建新 View 。如果我能找出#1,这可能会很好地工作...

那么,我是否最好以编程方式创建 Collection View ,或者我可以在这里做些什么?

最佳答案

为了其他人的利益,这就是我最终所做的...尽管我怀疑它可能并不理想,但这是可行的。

我创建了一个 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];
}

关于objective-c - 通过单击 NSCollectionVIew 项获取模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21805887/

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