117

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

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

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>
4

4 に答える 4

286

ただself.collectionView.delegate = self;UICollectionViewDelegateFlowLayoutから継承されていることに注意してくださいUICollectionViewDelegate

最初は不意を突かれたのは認めます。

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

于 2012-10-17T00:38:56.537 に答える
15

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

@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
于 2016-04-06T13:06:28.040 に答える