सवाल UICollectionViewDelegateFlowLayout कैसे सेट करें?


एक 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>

76
2017-10-17 00:08


मूल




जवाब:


केवल self.collectionView.delegate = self;। ध्यान दें कि UICollectionViewDelegateFlowLayout से विरासत UICollectionViewDelegate

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

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


192
2017-10-17 00:38



@ जॉन एस्ट्रोपिया, प्रश्न के लिए खेद है, लेकिन कोड में कस्टम लेआउट कैसे लगाया जाए? मैं स्टोरीबोर्ड के साथ उदाहरण देखता हूं लेकिन कोड के साथ नहीं। मुझे क्या करना चाहिए? - gaussblurinc
शायद, self.collectionViewLayout = UICollectionViewFlowLayout(), self.collectionViewLayout = [[UICollectionViewFlowLayout alloc]init] - Daishi Nakajima


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

@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