UICollectionViewDelegateFlowLayout कैसे सेट करें?


108

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

जवाबों:


265

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

मैं मानता हूं कि इसने मुझे पहली बार गार्ड से पकड़ा था।

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


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

3
शायद, self.collectionViewLayout = UICollectionViewFlowLayout(),self.collectionViewLayout = [[UICollectionViewFlowLayout alloc]init]
Daishi नाकाजिमा

14

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

@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

1

MacOS Mojave के लिए मेरे दो सेंट - स्विफ्ट

(मैं यहां खोज NSCollectionViewरहा हूं ... मुझे पता है कि सवाल था UICollectionView..)

उपरोक्त सभी ने कहा (प्रतिनिधि को निर्दिष्ट सेल आकार, भी) macOS के लिए सही है, भी।

नोट : यदि आप लिखते हैं:

class MyViewController:
    NSCollectionViewDelegate,
    NSCollectionViewDataSource,
    **NSCollectionViewDelegateFlowLayout** 
{

प्रक्रिया:

func collectionView(_ collectionView: NSCollectionView, 
                      layout collectionViewLayout: NSCollectionViewLayout, 
               sizeForItemAt indexPath: IndexPath) -> NSSize

कहा जाएगा

यदि हटा दिया जाता है, तो कोई प्रतिनिधि विधि नहीं बुलाई जाएगी। (के रूप में वर्ग प्रोटोकॉल का पालन नहीं करता है)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.