2012-10-17 9 views
71

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

Jest to dość łatwy do skonfigurowania źródła danych widoku do siebie:

MyViewController.m

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

Ale jak mam ustawić regulator być układ przepływu delegat widzenia?

- (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: "Niezgodne typy wskaźnik przypisywanie ...".

Kolekcja nagłówek pliku wygląda następująco:

MyViewController.h

@interface MyViewController : UIViewController <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout> 

Odpowiedz

182

Wystarczy self.collectionView.delegate = self;. Zauważ, że UICollectionViewDelegateFlowLayout dziedziczy po UICollectionViewDelegate.

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

No i to będzie działać tylko wtedy, gdy self.collectionView.collectionViewLayout jest ustawiana do układu przepływowego. (Lub zestaw z initWithFrame:collectionViewLayout:)

+1

@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

+3

prawdopodobnie, 'self.collectionViewLayout = UICollectionViewFlowLayout()', 'self.collectionViewLayout = [[UICollectionViewFlowLayout alloc] init]' –

7

Według poprzedniej odpowiedzi tylko przykładem zastosowania. 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