2

如何进行NSCollectionView更新以使用 显示当前选定的项目NSBox?在列表中显示选择似乎是一件基本的事情,但我遇到了各种各样的麻烦。

我已经阅读了这个问题,还查看了 Apple 的示例代码。似乎有几种方法可以做到这一点。

  1. 使用子类NSCollectionViewItem和特殊的“原型视图”。
  2. 使用NSBox.

我希望使用这种NSBox方式,因为它看起来很简单,并且也在官方代码示例中使用。

它显然是按照alternegro的以下引用所述完成的:

如果不同的背景颜色足以作为突出显示,您可以简单地使用 NSBox 作为您的集合项目视图的根项目。用您选择的突出显示颜色填充 NSBox。将 NSBox 设置为自定义,以便填充工作。将 NSBox 设置为透明。

将 NSBox 的透明度属性绑定到 File Owner(Collection Item) 的选定属性 将透明绑定的值转换器设置为 NSNegateBoolean。

我被困在第一部分:“使用 NSBox 作为你(原文如此)集合项目视图的根项目”。我试图将“自定义类”更改为FoobarBox 继承自的NSBox,但这似乎没有帮助,因为我无法将背景颜色更改为蓝色,也无法绑定透明度。任何有关如何在我的 NSCollectionVuew 中显示选择的指针都将不胜感激。

4

2 回答 2

3

首先,为您的 ListView 创建一个继承自 NSBox 的类

 @interface MyListViewBox : NSBox

    @property (unsafe_unretained) IBOutlet NSCollectionViewItem *controller;

 @end

然后,在 Interface Builder 中,将您的类名指定为“自定义类”属性,如我的屏幕截图所示

截屏

然后你会意识到 IB 没有在 GUI 中显示 NSBox 属性或绑定(至少在 4.5.2 版中),所以我决定以编程方式更改属性。

  • 在 NSBox 子类中为 NSCollectionViewItem 创建一个出口(如上所示)
  • 使用 IB 将插座链接到您的 NSCollectionItemView

  • 在您的 NSBox 子类的 -(void)awakeFromNib 中,添加以下代码

    -(void)awakeFromNib { 
    
      //properties are not showing up in XCode Inspector IB view
      //configuring the box here :-(
    
      self.boxType = NSBoxCustom;
      self.borderType = NSLineBorder;
      self.fillColor = [NSColor selectedControlColor];
    
      //bind the "transparent" property of NSBox to the "selected" property of NSCollectionViewItem controller
      //controller is bound as IBOutlet in IB
      NSValueTransformer* transformer = [NSValueTransformer valueTransformerForName:NSNegateBooleanTransformerName];
      [self bind:@"transparent"
        toObject:self.controller 
        withKeyPath:@"selected"
        options:[NSDictionary dictionaryWithObjectsAndKeys:transformer, NSValueTransformerBindingOption, nil]];
    }
    
于 2012-12-23T15:12:31.907 回答
1

在 XCode 4.5.2 中,您只需删除 NSColletionView 自动附带的 NSView 并拖入一个 NSBox (它将具有所有可用的适当绑定)。确保将 CollectionView 重新绑定到新 Box。

于 2013-01-28T21:50:11.340 回答