Кнопка переключения размера ячейки без изменения идентификатора ячейки UIViewController

Я создал код в моей кнопке, чтобы переключаться между cell identifier что делает это очень хорошо, но, очевидно, мне нужно было установить и исходный идентификатор ячейки, который является маленьким значком, так как бы я мог удалить этот идентификатор ячейки и заменить его другим, когда кнопка нажата. Мой текущий код выглядит следующим образом:

GroupsViewController.m

#import "GroupsViewController.h"
#import "CustomCell.h"

@interface GroupsViewController ()
{
    NSArray *arrayOfImages;
    NSArray *arrayOfDescriptions;
}

@end

@implementation GroupsViewController
{
    NSString *reuseIdentifier;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    [[self GroupsCollectionView]setDataSource:self];
    [[self GroupsCollectionView]setDelegate:self];
    reuseIdentifier= @"SmallIcon";


    arrayOfImages = [[NSArray alloc]initWithObjects:@"?.png", nil];

    arrayOfDescriptions = [[NSArray alloc]initWithObjects:@"?", nil];

}

-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
    return 1;
}

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return [arrayOfDescriptions count];
}

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{


    CustomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];

    [[cell IconImage]setImage:[UIImage imageNamed:[arrayOfImages objectAtIndex:indexPath.item]]];
    [[cell IconLabel]setText:[arrayOfDescriptions objectAtIndex:indexPath.item]];

    return cell;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    //Dispose of any resources that can be recreated.
}

- (IBAction)cellToggleAction:(id)sender {

    if([reuseIdentifier isEqualToString:@"SmallIcon"])
            reuseIdentifier=@"ListView";
    else if
        ([reuseIdentifier isEqualToString:@"ListView"])
            reuseIdentifier=@"LargeIcon";
    else if
        ([reuseIdentifier isEqualToString:@"LargeIcon"])
            reuseIdentifier=@"SmallIcon";

    [self.GroupsCollectionView reloadData];
    }

@end

CustomCell.h

#import <UIKit/UIKit.h>

@interface CustomCell : UICollectionViewCell

@property (weak, nonatomic) IBOutlet UIImageView *IconImage;

@property (weak, nonatomic) IBOutlet UILabel *IconLabel;

@end

Я предполагаю, что это связано со мной установкой reuseIdentifier в - (void)viewDidLoad чтобы я не получил никаких ошибок, чтобы я не установил одну, так что на самом деле то, что я прошу, это способ установить начальный reuseidzntifier и заменить его следующим образом, когда я переключаюсь между нажатиями кнопок.

Также было бы полезно, если бы кто-то мог указать мне правильное направление для добавления изображений значков к каждому нажатию кнопки.

Проблема возникает, когда я нажимаю кнопку, как показано на следующих изображениях, сами ячейки меняются, но первоначальный идентификатор ячейки остается на месте.

введите описание изображения здесь

1 ответ

Решение

Из того, что я понимаю ваш UICollectionViewCellс работают нормально. Вам просто нужно отрегулировать их размер при переключении клеток.

- (CGSize)collectionView:(UICollectionView *)collectionView
                          layout:(UICollectionViewLayout *)collectionViewLayout
          sizeForItemAtIndexPath:(NSIndexPath *)indexPath {

     CGSize cellSize;

     // Return required size based on your identifiers
    if([reuseIdentifier isEqualToString:@"SmallIcon"])
            cellSize = CGSizeMake(50, 50); // Sample size
    else if
        ([reuseIdentifier isEqualToString:@"ListView"])
            cellSize = CGSizeMake(80, 80); // Sample size
    else if
        ([reuseIdentifier isEqualToString:@"LargeIcon"])
            cellSize = CGSizeMake(120, 120); // Sample size

    return cellSize;
}
Другие вопросы по тегам