切换单元格大小按钮不更改单元格标识符 UIViewController

Posted

技术标签:

【中文标题】切换单元格大小按钮不更改单元格标识符 UIViewController【英文标题】:Toggle cell size button not changing cell identifier UIViewController 【发布时间】:2016-01-28 21:16:51 【问题描述】:

我在我的按钮中创建了一些代码来在我的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

我认为这与我在 @ 987654327@ 所以我没有收到任何错误,所以我没有设置一个,所以我真正要求的是一种设置初始reuseidzntifier 并在我在按钮点击之间切换时替换它的方法。

如果有人能指出我在每次单击按钮时添加图标图像的正确方向,那也会很有帮助。

当我单击下图所示的按钮时会出现问题,单元格本身会发生变化,但初始单元格标识符保持不变。

【问题讨论】:

【参考方案1】:

据我了解,您的 UICollectionViewCells 工作正常。您只需要在切换单元格时调整它们的大小。

- (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;

【讨论】:

对不起,但我对此有点陌生,我才学习了大约一个月,我将如何在你给出的代码中实现我的重用标识符的大小,我还需要添加这段代码到我的 viewController 文件?非常感谢。 您的 reuseIdentifiers 基本上描述了您想在运行时显示哪个单元格,对吗?所以基于这些reuseIdentifiers,你可以为不同的cell返回不同的size。检查示例代码的更新答案。是的,这将添加到您的GroupsViewController.m 完全偏离主题,但您无法指导我如何在每次点击时更改按钮图标的正确方向。非常感谢您,您的代码运行良好! 您可以使用[button setImage:[UIImage imageNamed:@"sample"] forState:UIControlStateNormal];[button setBackgroundImage:[UIImage imageNamed:@"background"] forState:UIControlStateNormal]; 设置UIButtonimagebackgroundImage。这可以添加到按下按钮时调用的 IBAction。如果您需要进一步澄清,请将其作为单独的问题发布:) ***.com/questions/35073751/…

以上是关于切换单元格大小按钮不更改单元格标识符 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章

如何根据单元格数量更改滚动视图大小?

单击 UIButton 时切换/更改 UICollectionView 中的单元格

如何从模态 UIView 更新自定义单元格中的 UIButton 标题

单元格中的破坏约束

使用带标识符的双端可重用单元格获取 UIView 时,UIFooterView 未显示

在 Tableview 上添加开关按钮并禁用单元格选择