web-dev-qa-db-ja.com

UICollectionViewDelegateFlowLayoutを設定する方法は?

UIViewControllerは、UICollectionViewへの参照を維持します。コントローラーは、UICollectionViewDelegateFlowLayoutを使用して組み込みのフローレイアウトを変更する必要があります。

ビューのデータソースをselfに設定するのは非常に簡単です。

MyViewController.m

- (void)viewDidLoad
{
    self.collectionView.dataSource = self;
}

しかし、コントローラーをビューのデリゲートフローレイアウトに設定するにはどうすればよいですか?

- (void)viewDidLoad
{
    self.collectionView.dataSource= self;
    // self.collectionView.??? = self; 
}

私はもう試した:

- (void)viewDidLoad
{
    self.collectionView.dataSource= self;
    self.collectionView.collectionViewLayout = self; 
}

しかし、「互換性のないポインター型の割り当て...」というエラーが表示されます。

コレクションヘッダーファイルは次のようになります。

MyViewController.h

@interface MyViewController : UIViewController <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>
89
Rich Apodaca

ただself.collectionView.delegate = self;UICollectionViewDelegateFlowLayoutUICollectionViewDelegateから継承することに注意してください。

最初は不意を突かれるかもしれません。

ああ、これはself.collectionView.collectionViewLayoutが実際にフローレイアウトに設定されている場合にのみ機能します。 (またはinitWithFrame:collectionViewLayout:で設定)

228
John Estropia

前の回答によると、単なる使用例です。それは本当に明確ではありませんが、どのように機能するかを示すことができます:

@interface PrettyViewController()<UICollectionViewDelegateFlowLayout, UICollectionViewDataSource>
    //some code
@end

@implementation PrettyViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.collectionView.delegate = self;//bingo! right here
}

#pragma mark - UICollectionViewDelegateFlowLayout

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section {
    return CGSizeMake([[UIScreen mainScreen] bounds].size.width, 20.0);
}


@end
11
WINSergey

OSX mojave-Swiftの2セント

(NSCollectionViewを検索してここに落ちました...私は質問がUICollectionViewについてだったことを知っています。)

上記のすべて(デリゲートの指定はセルサイズも意味します)もOSXに適しています。

NOTEあなたが書く場合:

クラスMyViewController:NSCollectionViewDelegate、NSCollectionViewDataSource、NSCollectionViewDelegateFlowLayout {

メソッド:

func collectionView(_ collectionView:NSCollectionView、layout collectionViewLayout:NSCollectionViewLayout、sizeForItemAt indexPath:IndexPath)-> NSSize

willが呼び出されます。

削除された場合、デリゲートメソッドは呼び出されません。 (クラスはプロトコルに従わないため)。

0
ingconti