我曾经创建了三个不同的UICollectionView,并在每个单元中放置了三个不同的自定义单元格,并用一个简单的标签栏按钮将它们连接在一起。在一些帮助之后我设法将代码缩小到只有一个UICollectionViewController,现在我只需要知道如何通过NavigationBarButton在每个自定义单元格之间切换。
如果我可以根据点击按钮的哪个选项更改按钮图标也会有所帮助(需要三次点击,如下所示(ListView,SmallIconView和LargeIconView))。
有什么建议吗?
ViewController.h
#import "GroupsViewController.h"
#import "CustomCell.h"
@interface GroupsViewController ()
{
NSArray *arrayOfImages;
NSArray *arrayOfDescriptions;
}
@end
@implementation GroupsViewController
{
NSString *reuseIdentifier;
}
- (void)viewDidLoad
{
[super viewDidLoad];
reuseIdentifier= @"SmallIcon";
[[self GroupsCollectionView]setDataSource:self];
[[self GroupsCollectionView]setDelegate:self];
arrayOfImages = [[NSArray alloc]initWithObjects:@"ac-cars.png", nil];
arrayOfDescriptions = [[NSArray alloc]initWithObjects:@"one", 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 SmallIcon; //error message (use of undeclared identifier)
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
//Dispose of any resources that can be recreated.
}
@end
CustomCell.h
#import <UIKit/UIKit.h>
@interface CustomCell : UICollectionViewCell
@property (weak, nonatomic) IBOutlet UIImageView *IconImage;
@property (weak, nonatomic) IBOutlet UILabel *IconLabel;
@end
我现在已将所有三个自定义单元格连接到一个UICollectionView连接,将所有标签和图像连接到相同的插座。
正如您所看到的,我现在已经删除了三个视图控制器并将所有自定义单元格放入一个UICollectionView中。我已将所有标签和图像链接到相应的插座。
如何连接标签栏按钮?我在哪里实现按钮的代码?非常感谢
答案 0 :(得分:2)
您只需要一个包含三个customCell的collectionView。
添加三个collectionViewCell用于不同的横向布局 每个buttonIdentifier。然后在每个按钮操作上,更改 reuseIdentifier并重新加载collectionView。
您就是这样做的:
为collectionViewCell的reuseIdentifier声明一个NSString变量,如:
NSString reuseIdentifier;
在实施部分。
然后在viewWillApper
中设置默认标识符,该标识符是默认标识符。
reuseIdentifier=@"largeIconVIewCellIdentifier";
然后在导航栏按钮的按钮操作中,根据需要设置reuseIdentifier
并重新加载集合视图。代码如下:
-(void)cellToggleAction
{
if([reuseIdentifier isEqualToString:@"SmallIcon"])
reuseIdentifier=@"ListView";
}
else if ([reuseIdentifier isEqualToString:@"ListView"])
reuseIdentifier=@"LargeIcon";
}
else if ([reuseIdentifier isEqualToString:@"LargeIcon"])
reuseIdentifier=@"SmallIcon";
}
[collectionView reloadData];
}
多数民众赞成!!你们都准备好了。 以下是供您参考的示例图像。
这三个customCell具有相同的类但重用次数不同 标识符
修改强>
#import "GroupsViewController.h"
#import "CustomCell.h"
@interface GroupsViewController ()
{
NSArray *arrayOfImages;
NSArray *arrayOfDescriptions;
}
@end
@implementation GroupsViewController
{
NSString *reuseIdentifier;
}
- (void)viewDidLoad
{
[super viewDidLoad];
reuseIdentifier= @"SmallIcon";
[[self GroupsCollectionView]setDataSource:self];
[[self GroupsCollectionView]setDelegate:self];
arrayOfImages = [[NSArray alloc]initWithObjects:@"ac-cars.png", nil];
arrayOfDescriptions = [[NSArray alloc]initWithObjects:@"one", 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:CellIdentifier1 forIndexPath:indexPath];
[[cell SmallIconImage]setImage:[UIImage imageNamed:[arrayOfImages objectAtIndex:indexPath.item]]];
[[cell SmallIconLabel]setText:[arrayOfDescriptions objectAtIndex:indexPath.item]];
return SmallIcon;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
//Dispose of any resources that can be recreated.
}
@end
并在CustomCell.h文件中:
#import <UIKit/UIKit.h>
@interface CustomCell : UICollectionViewCell
//Small Icon
@property (weak, nonatomic) IBOutlet UIImageView *SmallIconImage;
@property (weak, nonatomic) IBOutlet UILabel *SmallIconLabel;
@end
同时添加我上面添加的buttonAction。
答案 1 :(得分:0)
我建议使用enum
并保留enum
类型的属性。使用按钮切换enum
,并在sizeForItemAtIndexPath:
中根据enum
为每个条件设置三种不同的尺寸。在按钮中切换尺寸后,请务必在设置属性后致电reloadData
。
如果单元格需要调整每个高度的布局(超出高度增加),您可以让单元格类拥有enum
并在每个预期高度内应用样式。确保它是公开的,以便VC中的属性可以引用它并将其应用于cellForItemAtIndexPath:
中的单元格以及sizeForItemAtIndex:
。