标签: nscollectionview

获取NSCollectionView中的视图索​​引?

我使用新的基于视图的NSTableView为Mac OS X Lion开发了一个应用程序,但是由于我想将整个应用程序移植到Snow Leopard,我试图找出模拟这样一个tableview的最佳方法.到目前为止,我已经创建了一个NSCollectionView,一切都很好,除了我无法获取触发按钮单击事件的视图的索引.在Lion中我有以下功能:

- (IBAction)buttonClick:(id)sender
Run Code Online (Sandbox Code Playgroud)

所以我可以使用一个方法(我记不起它的名字)来得到tableview里面的视图索引

- (NSInteger)rowForView:(NSView *)aView
Run Code Online (Sandbox Code Playgroud)

使用aView作为发件人的超级视图,但我找不到类似于集合视图的东西...唯一"有用"的方法似乎是

- (NSCollectionViewItem *)itemAtIndex:(NSUInteger)index
Run Code Online (Sandbox Code Playgroud)

(或类似的东西),但这不能帮助我,因为它返回一个NSCollectionViewItem,我甚至无法访问它只知道相应的视图!

indexing cocoa nstableview nscollectionview nscollectionviewitem

7
推荐指数
1
解决办法
3116
查看次数

NSCollectionView高山脉内存泄漏?

我注意到通过Instruments在NSCollectionView中发生内存泄漏。当我查找代码时,它显示下面的特定行:

collectionView.makeItem(withIdentifier: identifier, for: indexPath) as? DisplayableCellProtocol
Run Code Online (Sandbox Code Playgroud)

然后我在Xcode,内存调试器中查看了它,发现有一些未引用的项目导致了泄漏。但是,并非由创建的所有项目都在makeItem泄漏,其中有些是正常的,但有些甚至没有显示。

托管的普通未泄漏项目类似于此图 正确

泄漏的是这样的(没有任何连接): 错误

那正常吗,其他人也有同样的问题吗?有谁知道如何正确解决这个问题?这与使用xib设计项目视图有关吗?

以下是一些有助于理解这种情况的代码:

func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem {
  let data = datasource[indexPath.item]
  let identifier: String = "ServiceCell"
  // Next line is where the leak occurs
  guard let cell = collectionView.makeItem(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: identifier), for: indexPath) as? ServiceCell else {
      return ServiceCell(nibName: NSNib.Name("ServiceCell.xib"), bundle: Bundle.main)
  }
  cell.iconView.image = data.icon
  cell.serviceLabel.stringValue = data.name
  cell.introLabel.stringValue = data.content
  cell.highlighted = false
  return cell
}
Run Code Online (Sandbox Code Playgroud)

ServiceCell的定义是:

class ServiceCell: NSCollectionViewItem { …
Run Code Online (Sandbox Code Playgroud)

macos xcode memory-leaks storyboard nscollectionview

7
推荐指数
1
解决办法
351
查看次数

如何从NSCollectionViewItem中的视图获取representObject?

我有一个在我的每个CollectionView项目中使用的视图.我从我的视图中有一个关于CollectionViewItem的IBOutlet,我已经将它连接到Interface Builder中.我想在我的视图代码中访问来自representObject(它是一个Core Data对象)的值.这是我正在尝试做的一个示例 - 访问representObject的序列值:

在.h文件中:

IBOutlet NSCollectionViewItem *item; // Connected in IB
Run Code Online (Sandbox Code Playgroud)

在.m文件中

NSString *seq = [[item representedObject] valueForKey:@"seq"];
NSLog(@"Seq: %@", seq); // returns Seq: (null)
Run Code Online (Sandbox Code Playgroud)

我知道seq是填充的,因为我使用representObject.seq键路径将它绑定到IB中CollectionViewItem视图中的标签,并且可以正常工作.

知道为什么当我尝试在视图的代码中访问seq的值时它返回null吗?

cocoa objective-c cocoa-bindings nscollectionview

6
推荐指数
1
解决办法
4048
查看次数

有没有办法在NSCollectionView中拥有不同的视图?

我想要一些类似于iWork如何为Pages设置模板选择屏幕,当你可以选择不同的模板,并且每个视图包含不同的信息有不同的大小等.

我已经尝试了继承NSCollectionView并使用newItemForRepresentedObject方法确定要显示的视图(而不是使用itemPrototype视图Interface Builder),但由于某种原因它没有正确定位视图,并且它没有显示正确的视图数量出现的物品数量.这是我的代码.我希望有人可能有更好的方法来做到这一点,或者是如何做到这一点的一个例子.

personView和companyView是子类NSCollectionView中的属性,它们是IB中视图的IBOutlets.

-(NSCollectionViewItem *)newItemForRepresentedObject:(id)object{
NSCollectionViewItem *collectionViewItem = [[NSCollectionViewItem alloc] init];

 [collectionViewItem setRepresentedObject:object];

 if([[object valueForKey:@"company"] boolValue] == YES){
     NSView *view = [companyView retain];
     [collectionViewItem setView:companyView];
 }else{
     [collectionViewItem setView:personalView];
 }

return collectionViewItem;
Run Code Online (Sandbox Code Playgroud)

}

macos cocoa objective-c nscollectionview

6
推荐指数
1
解决办法
1357
查看次数

NSCollectionView拖放:大多数代表事件未被调用

我有一个绑定到NSArrayController的NSCollectionView.我想让拖放工作,所以我创建一个委托并实现方法

-(BOOL)collectionView:(NSCollectionView *)collectionView canDragItemsAtIndexes:(NSIndexSet *)indexes withEvent:(NSEvent*)event
-(BOOL)collectionView:(NSCollectionView *)collectionView acceptDrop:(id < NSDraggingInfo >)draggingInfo index:(NSInteger)index dropOperation:(NSCollectionViewDropOperation)dropOperation
-(NSDragOperation)collectionView:(NSCollectionView *)collectionView validateDrop:(id < NSDraggingInfo >)draggingInfo proposedIndex:(NSInteger *)proposedDropIndex dropOperation:(NSCollectionViewDropOperation *)proposedDropOperation
-(NSArray *)collectionView:(NSCollectionView *)collectionView namesOfPromisedFilesDroppedAtDestination:(NSURL *)dropURL forDraggedItemsAtIndexes:(NSIndexSet *)indexes
Run Code Online (Sandbox Code Playgroud)

我为两个BOOL方法返回YES,为validateDrop:方法返回NSDragOperationMove,为namesOfPromisedFilesDroppedAtDestination:方法返回一个空数组.我还有一个NSLog语句作为每个方法的第一行,所以我可以看到它们何时被调用.

现在,唯一被调用的方法是canDragItemsAtIndexes :(其中我返回YES).我看到它被调用,但任何进一步的拖动只会修改选择.其余的从未被召唤过.

如果我使NSCollectionView不支持选择,那么甚至不会调用该方法.

我敢肯定我错过了一些非常明显的东西,但我无法弄清楚它是什么.有没有人使用NSCollectionViews进行拖放工作并且可以解决一些问题?

macos cocoa drag-and-drop objective-c nscollectionview

6
推荐指数
1
解决办法
5251
查看次数

基于视图的NSTableView与NSCollectionView?

我已经理解了基于单元格的 NSTableView 的飞行重量方法,我想我理解与NSCollectionView的差异.(基于单元格的)NSTableView和NSCollectionView之间的差异

但是,有点不太明显的是基于视图的 NSTableView和NSCollectionView 之间的差异.

使用NSCollectionView可以灵活地显示其项目(即网格布局),可以模拟tableView的列表(最多一列的网格)并排除个人偏好,为什么有人会选择(基于视图)NSTableView而不是NSCollectionView?

cocoa nstableview nscollectionview

6
推荐指数
1
解决办法
2173
查看次数

从NSScrollView/NSCollectionView中删除边框

正如您在下面的屏幕截图中看到的,NSCollectionView我使用的是某种边框(细灰线),我想摆脱它.有人可以告诉我如何实现这一目标吗?我已经尝试了继承NSCollectionView并试图在drawRect:使用中覆盖它,[[super layer] setBorderWidth:0.0f];但这不起作用.

在此输入图像描述

在Google,SO和Apple文档上搜索也没有帮助.所以有人已经实现了这一点,或者知道我在哪里可以找到如何做到这一点的例子?

提前谢谢,Björn

cocoa nscollectionview nsscrollview

6
推荐指数
1
解决办法
1597
查看次数

如何在NSCollectionView的行和列之间给出空格?

我创建了集合视图,我无法在集合视图项之间留出空间.所以请帮助....先谢谢...

我使用此链接创建集合视图https://andrehoffmann.wordpress.com/2009/08/29/nscollectionview-tutorial-for-dummies-xcode-3-1-3/

macos cocoa objective-c nscollectionview

6
推荐指数
1
解决办法
1794
查看次数

NSCollectionView自定义布局启用滚动

我无法纵向和横向滚动以使用NSCollectionView的自定义布局.根据文档,在我的子类中,我返回`collectionViewContentSize',如果它太大,则在集合视图的封闭滚动视图中自动启用滚动.但是,即使我在水平行中排序所有元素,也只启用垂直滚动.

这是一个截图:http: //i.stack.imgur.com/tMbCN.png

这是我的布局代码:

import Cocoa 
class Layout: NSCollectionViewLayout {

var cellSize = CGSize(width: 100, height: 30)

var cellSpacing: CGFloat = 10
var sectionSpacing: CGFloat = 20

private var contentSize = CGSize.zero
private var layoutAttributes = [NSIndexPath: NSCollectionViewLayoutAttributes]()


override func prepareLayout() {
    guard let collectionView = collectionView else { return }

    let sections = collectionView.numberOfSections
    guard sections > 0 else { return }

    contentSize.height = cellSize.height

    for section in 0..<sections {
        let items = collectionView.numberOfItemsInSection(section)
        guard items > …
Run Code Online (Sandbox Code Playgroud)

macos cocoa nscollectionview nsscrollview swift

6
推荐指数
2
解决办法
2463
查看次数

NSCollectionView不会滚动项目超过初始可见的rect

在尝试修复一些出色的macOS 10.13错误时,我遇到了现有应用程序的问题.我有一个小的NSCollectionView,看起来类似于日历应用程序中的小月历.它会显示天数并在点击时垂直滚动.但是,在macOS 10.13上,集合视图仅显示几行而不会滚动.我已经验证数据源被正确调用,它确实尝试加载其他项目 - 但不会滚动到它们.

我已经创建了一个小示例应用程序,它也演示了这个问题.这是一个基本的macOS应用程序,它通过Main故事板添加NSCollectionView,并具有从nib加载的通用NSCollectionViewItem类.主视图控制器中的整个代码是:

- (void)viewDidLoad {  
  [super viewDidLoad];  

  NSNib *nib = [[NSNib alloc] initWithNibNamed:@"FooCollectionViewItem" bundle:nil];  
  [self.collectionView registerNib:nib forItemWithIdentifier:@"foo"];  
}  
- (void)viewDidAppear {  
  [super viewDidAppear];  

  [self.collectionView reloadData];  
}  
- (void)setRepresentedObject:(id)representedObject {  
  [super setRepresentedObject:representedObject];  

}  
- (NSInteger)numberOfSectionsInCollectionView:(NSCollectionView *)collectionView {  
  return 1;  
}  
- (NSInteger)collectionView:(NSCollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {  
  return 2000;  
}  
- (NSCollectionViewItem *)collectionView:(NSCollectionView *)collectionView itemForRepresentedObjectAtIndexPath:(NSIndexPath *)indexPath {  
  FooCollectionViewItem *item = [collectionView makeItemWithIdentifier:@"foo" forIndexPath:indexPath];  
  item.fooField.stringValue = [NSString stringWithFormat:@"%ld", indexPath.item];  

  return item;  
}
Run Code Online (Sandbox Code Playgroud)

生成的应用程序如下所示:

在此输入图像描述

不幸的是,这完全是集合视图.滚动不会滚动任何其他项目.我已将示例应用程序上传到https://www.dropbox.com/sh/wp2y7g0suemzcs1/AABVKfTZq54J7riy6BR7Mhxha?dl=0,以防有用.任何想法为什么这对我来说打破10.13?

cocoa objective-c nscollectionview macos-high-sierra

6
推荐指数
1
解决办法
1353
查看次数