【问题标题】:Getting model from click on NSCollectionVIew item通过单击 NSCollectionVIew 项目获取模型
【发布时间】:2014-03-08 08:01:54
【问题描述】:

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

目前,我几乎完全在界面构建器中实现了一个基本的单窗口 UI。一个带有 NSCollectionView 的窗口,在我的窗口控制器中使用 ArrayController 和 NSMutableArray 集合项的绑定。效果很好。

但是,有两件事我不确定,这让我想知道我是否最好在这里以编程方式做事而不是弄乱 Interface Builder。特别是我不知道该怎么做的两件事:

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

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

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

那么,我是直接以编程方式创建集合视图更好,还是我可以在这里做些什么?

【问题讨论】:

    标签: objective-c cocoa cocoa-bindings


    【解决方案1】:

    为了其他人,这就是我最终做的事情......虽然我怀疑它可能并不理想,但这很有效。

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

    【讨论】:

      【解决方案2】:

      NSCollectionViewItemNSViewController的子类,可以在其上设置/获取representedObject。我总是用它来访问底层对象。

      ⑵ 你绝对想拆分你的XIB。每次我都这样做,我发现它让我的工作变得更轻松。

      【讨论】:

      • 当前集合视图将其内容绑定到一个数组控制器,该数组控制器绑定到窗口控制器中的 NSMutableArray。我想我没有弄清楚的部分是,如何通过点击获得 NSCollectionViewItem?我可以在窗口控制器或 CollectionItemView 中使用的实际视图的子类中捕获 mouseDown 事件,但如何将其映射到 CollectionViewItem 或模型我不知道...
      • 我会继承 NSCollectionView,因为它没有捕获点击的原生概念。
      猜你喜欢
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 2023-04-04
      • 2012-12-27
      • 2015-07-08
      • 1970-01-01
      相关资源
      最近更新 更多