- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我觉得这是一个简单的任务,但我似乎无法让它发挥作用。我正在尝试使用带有自定义项目的 NSCollectionView 。我向该项目的自定义 View 添加了另一个 NSImageView,并对该 View 进行了子类化,以便添加连接到该附加 NSImageView 的自定义 socket 。
现在我要重写 - (NSCollectionViewItem *)newItemForRepresentedObject:(id)object
因为有时我需要删除此 NSImageView。
- (NSCollectionViewItem *)newItemForRepresentedObject:(id)object {
CustomItem *theItem = (CustomItem *)[super newItemForRepresentedObject: object];
...
if (I need to remove that NSImageView) {
[[theItem additionalImageView] removeFromSuperview];
}
return theItem;
}
无论如何,additionalImageView 似乎是(nil)
。这在某种程度上是显而易见的,因为 super 方法将返回默认的 NSCollectionViewItem,它没有自定义 socket 。
在这里最好做的事情是什么?我读了一些有关 copy
方法的内容,并尝试了:
- (NSCollectionViewItem *)newItemForRepresentedObject:(id)object {
CustomItem *theItem = [(CustomItem *)[super itemPrototype] copy]; // Here is the change
...
if (I need to remove that NSImageView) {
[[theItem additionalImageView] removeFromSuperview];
}
return theItem;
}
但这行不通。那么,有没有办法在使用自定义 NSCollectionViewItem 时保留自定义 socket ?
任何帮助将不胜感激。谢谢!
最佳答案
问题是没有人会实例化新项目的 ImageView 。复制不起作用,因为您需要两个 ImageView ,而不是一个。
有两种方法可以处理这个问题:
不要调用 newItemForRepresentedObject
的父类(super class)实现,而是使用 NSNib
自行实例化该项目(下面的工厂方法)。在方法调用中,您可以指定 self
作为所有者,它将为您连接 socket 。然后设置representedObject并调整 ImageView 。这是工厂方法的代码:
// Load item view from CustomItem.nib
// For consistent results, nib should contain exactly one NSCollectionViewItem.
- (NSCollectionViewItem *)newCollectionViewItem {
static NSNib *nib;
if (!nib) nib = [[NSNib alloc] initWithNibNamed:@"CustomItem" bundle:nil];
NSArray *nibObjects;
if (![nib instantiateNibWithOwner:self topLevelObjects:&nibObjects]) return nil;
for (id obj in nibObjects)
if ([obj isKindOfClass:[NSCollectionViewItem class]])
return (NSCollectionViewItem *)obj;
return nil;
}
调用[super newItemForRepresentedObject:]
后,检查是否需要保留 ImageView 。如果这样做,请实例化一个新的 NSImageView,设置其属性,并将其添加到 super View 。最后一部分听起来很棘手。也许采用这种方法的人会提供一些代码。
关于cocoa - NSCollectionViewItem 子类中的自定义 socket ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6884352/
如何通过再次单击 NSCollectionViewItem 来取消选择它? 这是我用于选择和取消选择的代码: func collectionView(collectionView: NSCollect
我正在尝试设置一个 NSCollectionView,它在各个 NSCollectionViewItem View 中具有自定义绘图。我需要在每个 View 中绘制一个图像,但无法将该 View 链接
简单的问题,但我找不到任何答案...如何更改 NSCollectionViewItem 实例的角半径? 最佳答案 NSCollectionViewItem 的 view 默认没有图层。你需要设置wan
我有一个绑定(bind)到 NSCollectionView 的 NSArrayController。我的数据模型是一个类 Person。 Inside Person 是一个计时器,每秒都会更改 ag
我正在尝试为我的 NSCollectionViewItem 提供动态大小。我希望它们的大小由它们的内容和我定义的约束决定。 为此,我已将以下内容添加到包含 NSCollectionView 的 Vie
我在这里有点迷路:我创建了一个像 colorPicker 一样的按钮:单击它会在弹出窗口中显示一个 collectionView。我首先使用包含 View + collectionView(嵌入为 s
我想在 NSCollectionViewItem 的 View 中放置一个自定义控件。 假设我有一个名为 BoxesView 的自定义 NSView。BoxesView 只是一个在其 View 中绘制
我是 Cocoa 开发的新手,它的很多概念我都不清楚......我正在尝试构建一个简单的应用程序,它将使用 Flickr API 检索用户照片集并将其显示在 NSCollectionView 中,通过
我觉得这是一个简单的任务,但我似乎无法让它发挥作用。我正在尝试使用带有自定义项目的 NSCollectionView 。我向该项目的自定义 View 添加了另一个 NSImageView,并对该 Vi
我正在尝试创建一个 NSCollectionView,其中的项目适应可用空间,而不是为项目定义固定大小并相应地调整 NSCollectionView 的大小。 我无法找到使用 NSCollection
我正在尝试构建一个充满多个可编辑 TextView 的 NSCollectionView。 (Swift 中的 OS X 应用程序。)我的 NSCollectionViewItem 子类称为 Note
我正在尝试以编程方式创建一个简单的 NSCollectionView。我在 NSViewController 中设置它: class ViewController: NSViewController
我正在使用 NSCollectionView 和 NSCollectionViewItems。 我遇到了以下问题:如果我旋转其中一项的 NSImageView,然后调用 reloadData,更新的
我正在编写一个非常简单的 macOS 应用程序,我想在 Collection View 中显示一些图像。对于它们的显示方式,我不需要任何特殊行为。 docs for NSCollectionViewI
我有一个问题。如何将鼠标右键菜单添加到 NSCollectionViewItem。作为尝试,我还使用了 Apple 的演示应用程序 IconCollection。我尝试将 NSMenu 拖到 Icon
在我的设置中,我有一个连接到 Mac 的卷的 NSCollectionView。对于 NSCollectionViewItem 的 View ,我有一个 NSBox,其中有一个 NSTableView
我在 NSCollectionViewItem 的 View 上有一个 NSTextField。 当您单击 NSCollectionViewItem 时,该项目将被选中。 当您单击 NSTextFie
我一直在努力尝试创建一个 NSCollectionView,它具有一组带有自定义 View 的 NSCollectionViewItems。当项目 View 上的控件是标准 AppKit 控件时,代码
我的自定义 NSView 中有一个 NSTabView,用作 NSCollectionView 的原型(prototype)。在第二个选项卡中,我有 NSButton 按钮和 NSImageView
override func viewDidLoad() { super.viewDidLoad() // Do view setup here. let item = NSNi
我是一名优秀的程序员,十分优秀!