187 votes

Créer un UICollectionView de manière programmatique

Je suis à la recherche d'un guide ou d'un tutoriel qui me montrerait comment configurer un simple UICollectionView en utilisant uniquement du code.

Je suis en train de patauger dans la documentation sur le site d'Apple et j'utilise le manuel de référence également.

Mais j'aurais vraiment besoin d'un guide simple qui me montrerait comment configurer un UICollectionView sans avoir à utiliser des Storyboards ou des fichiers XIB/NIB - mais malheureusement, lorsque je fais des recherches, je ne trouve que des tutoriels qui utilisent le Storyboard.

369voto

Hayaßusa Points 1

Fichier d'en-tête : --

@interface ViewController : UIViewController<UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>
{
    UICollectionView *_collectionView;
}

Dossier de mise en œuvre : --

- (void)viewDidLoad
{
     self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

     UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init];
    _collectionView=[[UICollectionView alloc] initWithFrame:self.view.frame collectionViewLayout:layout];
    [_collectionView setDataSource:self];
    [_collectionView setDelegate:self];

    [_collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cellIdentifier"];
    [_collectionView setBackgroundColor:[UIColor redColor]];

    [self.view addSubview:_collectionView];

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return 15;
}

// The cell that is returned must be retrieved from a call to -dequeueReusableCellWithReuseIdentifier:forIndexPath:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];

    cell.backgroundColor=[UIColor greenColor];
    return cell;
}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return CGSizeMake(50, 50);
}

Sortie---

enter image description here

57voto

Hayaßusa Points 1

Pour l'utilisateur de swift:--

class TwoViewController: UIViewController,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout,UICollectionViewDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        var flowLayout:UICollectionViewFlowLayout = UICollectionViewFlowLayout();

        var __collectionView:UICollectionView? = UICollectionView(frame: CGRectMake(10, 10, 300, 400), collectionViewLayout: flowLayout);
        __collectionView?.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "collectionCell");
        __collectionView?.delegate = self;
        __collectionView?.dataSource = self;
        __collectionView?.backgroundColor = UIColor.cyanColor();

        self.view.addSubview(__collectionView!);
    }

    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
    {
        return 20;
    }

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
    {
        var cell:UICollectionViewCell=collectionView.dequeueReusableCellWithReuseIdentifier("collectionCell", forIndexPath: indexPath) as UICollectionViewCell;

        cell.backgroundColor = UIColor.greenColor();
        return cell;
    }

    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize
    {
        return CGSizeMake(50, 50);
    }

    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets
    {
        return UIEdgeInsetsMake(5, 5, 5, 5); //top,left,bottom,right
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

1voto

Puneet Points 2782

Apple Docs :

- (id)initWithFrame:(CGRect)frame 
      collectionViewLayout:(UICollectionViewLayout *)layoutParameters

Utilisez cette méthode lorsque vous initialisez un objet de vue de collection de manière programmatique. Si vous indiquez nil pour le paramètre layout, vous devez devez affecter un objet de mise en page à la propriété collectionViewLayout avant d'afficher la vue de collection à l'écran. Si vous ne le faites pas, la la vue de la collection ne pourra présenter aucun élément à l'écran.

Cette méthode est l'initialisateur désigné.

Cette méthode est utilisée pour initialiser le UICollectionView . ici vous fournissez le cadre et un UICollectionViewLayout objet.

UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init];

À la fin, ajoutez UICollectionView en tant que subview à votre vue.

Maintenant la vue de la collection est ajoutée pro grammaticalement. Vous pouvez continuer à apprendre.
Bon apprentissage ! J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X