Pytanie Jak ustawić UICollectionViewDelegateFlowLayout?


UIViewController utrzymuje odniesienie do UICollectionView. Kontroler powinien zmodyfikować wbudowany układ przepływu za pomocą UICollectionViewDelegateFlowLayout.

Ustawienie źródła danych widoku jest całkiem proste:

MyViewController.m

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

Ale w jaki sposób ustawić kontroler, aby był układem przepływu delegatów w widoku?

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

Próbowałem:

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

Ale pojawia się błąd: "Niekompatybilne typy wskaźników przypisujące ...".

Plik nagłówkowy kolekcji wygląda następująco:

MyViewController.h

@interface MyViewController : UIViewController <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>

76
2017-10-17 00:08


pochodzenie




Odpowiedzi:


Właśnie self.collectionView.delegate = self;. Zauważ, że UICollectionViewDelegateFlowLayout dziedziczy z UICollectionViewDelegate.

Przyznaję, że na początku może cię to zaskoczyć.

Och, a to zadziała tylko wtedy, gdy self.collectionView.collectionViewLayout jest właściwie ustawiony na układ przepływu. (lub ustaw z initWithFrame:collectionViewLayout:)


192
2017-10-17 00:38



@JohnEstropia, przepraszam za pytanie, ale jak zainicjować niestandardowy układ w kodzie? Widzę przykłady ze scenorysami, ale nie z samym kodem. Co powinienem zrobić? - gaussblurinc
prawdopodobnie, self.collectionViewLayout = UICollectionViewFlowLayout(), self.collectionViewLayout = [[UICollectionViewFlowLayout alloc]init] - Daishi Nakajima


Zgodnie z poprzednią odpowiedzią tylko przykład użycia. To naprawdę nie jest jasne, ale mogę pokazać, jak to działa:

@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