Soru UICollectionViewDelegateFlowLayout nasıl ayarlanır?


Bir UIViewController bir UICollectionView referansını korur. Denetleyici, UICollectionViewDelegateFlowLayout kullanarak yerleşik akış düzenini değiştirmelidir.

Görünümün veri kaynağını kendiliğinden ayarlamak oldukça kolaydır:

MyViewController.m

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

Fakat denetleyiciyi görünümün temsilci akış düzeni olarak nasıl ayarlayabilirim?

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

Denedim:

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

Ancak hatayı alıyorum: "Uyumsuz işaretçi türleri atama ...".

Koleksiyon başlığı dosyası şöyle görünür:

MyViewController.h

@interface MyViewController : UIViewController <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>

76
2017-10-17 00:08


Menşei




Cevaplar:


Sadece self.collectionView.delegate = self;. Bunu not et UICollectionViewDelegateFlowLayout dan miras UICollectionViewDelegate.

İlk başta seni koruyabildiğini itiraf ediyorum.

Oh ve bu sadece işe yarayacak self.collectionView.collectionViewLayout aslında akış düzeninize ayarlanır. (veya ile ayarlayın initWithFrame:collectionViewLayout:)


192
2017-10-17 00:38



@JohnEstropia, soru için üzgünüm, ama kodda özel düzen nasıl yapılır? Storyboard'larla örnekler görüyorum ama kodun kendisiyle değil. Ne yapmalıyım? - gaussblurinc
muhtemelen, self.collectionViewLayout = UICollectionViewFlowLayout(), self.collectionViewLayout = [[UICollectionViewFlowLayout alloc]init] - Daishi Nakajima


Önceki cevaplara göre kullanım örneği. Gerçekten net değil ama nasıl çalıştığını gösterebilirim:

@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

9
2018-04-06 13:06