首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSCollectionView的collectionView:itemForRepresentedObjectAtIndexPath:方法从未被调用

NSCollectionView的collectionView:itemForRepresentedObjectAtIndexPath:方法从未被调用
EN

Stack Overflow用户
提问于 2016-05-21 04:38:46
回答 1查看 1.1K关注 0票数 1

我已经习惯了iOS的UICollectionView,并且尝试在OSX上设置一个NSCollectionView,而不使用任何故事板(大多数教程使用.xibs,所以它们略有不同)。API看起来类似,但我无法获得集合视图来调用dataSource的collectionView:itemForRepresentedObjectAtIndexPath:方法。

我已经将我的原始代码简化到了我认为调用此dataSource方法所需的集合视图的最小值:

代码语言:javascript
复制
@import Cocoa;

static NSString * const kCollectionViewControllerItemID = @"ItemID";

@interface CollectionViewItem : NSCollectionViewItem
@end

@implementation CollectionViewItem
@end

@interface CollectionViewController : NSViewController  <NSCollectionViewDelegate, NSCollectionViewDataSource>

@property (nonatomic, strong) NSCollectionView *collectionView;

@end

@implementation CollectionViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    NSCollectionViewFlowLayout *layout = [[NSCollectionViewFlowLayout alloc] init];
    [layout setItemSize:CGSizeMake(100, 100)];

    _collectionView = [[NSCollectionView alloc] init];
    [_collectionView setTranslatesAutoresizingMaskIntoConstraints:NO];
    [_collectionView setCollectionViewLayout:layout];
    [_collectionView setDataSource:self];
    [_collectionView setDelegate:self];
    [_collectionView registerClass:[CollectionViewItem class] forItemWithIdentifier:kCollectionViewControllerItemID];
    [[self view] addSubview:_collectionView];
    [[self view] addConstraints:@[
                                  [NSLayoutConstraint constraintWithItem:_collectionView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:[self view] attribute:NSLayoutAttributeTop multiplier:1.0f constant:0],
                                  [NSLayoutConstraint constraintWithItem:_collectionView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:[self view] attribute:NSLayoutAttributeLeading multiplier:1.0f constant:0],
                                  [NSLayoutConstraint constraintWithItem:[self view] attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:_collectionView attribute:NSLayoutAttributeBottom multiplier:1.0f constant:0],
                                  [NSLayoutConstraint constraintWithItem:[self view] attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:_collectionView attribute:NSLayoutAttributeTrailing multiplier:1.0f constant:0],
                                  ]];
}

- (NSInteger)collectionView:(NSCollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return 1;
}

- (NSCollectionViewItem *)collectionView:(NSCollectionView *)collectionView itemForRepresentedObjectAtIndexPath:(NSIndexPath *)indexPath
{
    //this method is never called
    return [collectionView makeItemWithIdentifier:kCollectionViewControllerItemID forIndexPath:indexPath];
}

@end

这个实现缺少了什么?

编辑:为了便于复制,我在GitHub https://github.com/BradB132/OSXCollectionViewTest上建立了一个示例项目。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-26 23:57:32

因此,您需要将NSCollectionView封装在NSScrollView中:

代码语言:javascript
复制
NSScrollView *scrollView = [[NSScrollView alloc] initWithFrame:NSZeroRect];
_collectionView = [[NSCollectionView alloc] initWithFrame:NSZeroRect];
scrollView.documentView = _collectionView;
[self.view addSubview:scrollView];

现在应该调用collectionView:itemForRepresentedObjectAtIndexPath:。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37358949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档