私はiOSのUICollectionView
に慣れていて、ストーリーボードを使用せずにOSXでNSCollectionView
を設定しようとしています(ほとんどのチュートリアルでは.xibsを使用しているので若干異なります)。 APIも同様ですが、コレクションビューでdataSourceのcollectionView:itemForRepresentedObjectAtIndexPath:
メソッドを呼び出すことができません。NSCollectionViewのcollectionView:itemForRepresentedObjectAtIndexPath:メソッドが呼び出されない
私がダウンして、私はこのデータソースのメソッドを呼び出すためにコレクションビューを取得するために必要なことだろうと思ったものを最小に私の元のコードを簡素化しました:
@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
この実装が欠落していますか?
EDIT:
NSScrollView *scrollView = [[NSScrollView alloc] initWithFrame:NSZeroRect];
_collectionView = [[NSCollectionView alloc] initWithFrame:NSZeroRect];
scrollView.documentView = _collectionView;
[self.view addSubview:scrollView];
collectionView: 再現することは、これは容易にするために、私はGitHubのhttps://github.com/BradB132/OSXCollectionViewTest
他のデータソースメソッドが呼び出されていますか? – rocky
'itemForRepresentedObjectAtIndexPath'メソッドは呼び出されない唯一のメソッドです。このコードサンプルでリポジトリへのリンクを追加したので、簡単に問題を再現できます。 – BradB