2012-10-17 13 views
71

एक UIViewController एक UICollectionView के संदर्भ को बनाए रखता है। नियंत्रक को UICollectionViewDelegateFlowLayout का उपयोग करके अंतर्निहित प्रवाह लेआउट को संशोधित करना चाहिए।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> 

उत्तर

182

बस self.collectionView.delegate = self;। ध्यान दें कि UICollectionViewDelegateFlowLayoutUICollectionViewDelegate से विरासत में है।

मैं मानता हूं कि यह आपको पहले गार्ड से पकड़ सकता है।

ओह और यह केवल तभी काम करेगा जब self.collectionView.collectionViewLayout वास्तव में आपके प्रवाह लेआउट पर सेट हो। (या initWithFrame:collectionViewLayout: के साथ सेट करें)

+1

@ जोहान एस्ट्रोपिया, प्रश्न के लिए खेद है, लेकिन कोड में कस्टम लेआउट कैसे लगाया जाए? मैं स्टोरीबोर्ड के साथ उदाहरण देखता हूं लेकिन कोड के साथ नहीं। मुझे क्या करना चाहिए? – gaussblurinc

+3

शायद, 'self.collectionViewLayout = UICollectionViewFlowLayout() ',' self.collectionViewLayout = [[UICollectionViewFlowLayout alloc] init]' –

7

पिछले उत्तर के अनुसार उपयोग का उदाहरण। यह वास्तव में स्पष्ट नहीं है लेकिन मैं दिखा सकता हूं कि यह कैसे काम करता है:

@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 
संबंधित मुद्दे