কীভাবে ইউআইসি কলিকেশনভিউডেলিগেটফ্লোএলআউট সেট করবেন?


108

একটি ইউআইভিউকন্ট্রোলার একটি ইউআইসি কালেকশনভিউয়ের একটি রেফারেন্স বজায় রাখে। কন্ট্রোলারের ইউআইসিওলেকশনভিউডেলিগেটফ্লোএলআউট ব্যবহার করে বিল্ট-ইন ফ্লো লেআউটটি সংশোধন করা উচিত।

ভিউটির ডেটা উত্সটি নিজের কাছে সেট করা বেশ সহজ:

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 Nakajima

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

ম্যাকোস মোজভেভের জন্য আমার দুটি সেন্ট - সুইফ্ট

(আমি এখানে অনুসন্ধানে NSCollectionViewপড়েছি ... আমি জানি যে প্রশ্নটি ছিল UICollectionView..)

উপরে উল্লিখিত সমস্ত (ডেলিগেটের প্রতিনিধিত্ব করা ঘরের আকারও বোঝায়) ম্যাকওএসের জন্যও সঠিক।

দ্রষ্টব্য : আপনি যদি লিখেন:

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

পদ্ধতি:

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

বলা হবে

অপসারণ করা হলে, কোনও প্রতিনিধি পদ্ধতি কল করা হবে না। (শ্রেণি যেমন প্রোটোকল মানায় না)।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.