如何在集合视图中单击单元格时创建按钮操作

Posted

技术标签:

【中文标题】如何在集合视图中单击单元格时创建按钮操作【英文标题】:How to create button action on cell click in a collection view 【发布时间】:2014-05-27 03:50:05 【问题描述】:

其实我拿了两个collection view controllers。在第一个集合视图控制器中,我已经传递了图像数组。单击一个图像,我想显示另一个集合视图控制器。如何执行此操作...请建议我。

- (void)viewDidLoad

[super viewDidLoad];

recipeImages = [NSArray arrayWithObjects:@"angry_birds_cake.jpg", @"creme_brelee.jpg", @"egg_benedict.jpg", @"full_breakfast.jpg", @"green_tea.jpg", @"ham_and_cheese_panini.jpg", @"ham_and_egg_sandwich.jpg", @"hamburger.jpg", @"instant_noodle_with_egg.jpg", nil];


- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
return recipeImages.count;


- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath



- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
static NSString *identifier = @"Cell";

UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];

UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100];
recipeImageView.image = [UIImage imageNamed:[recipeImages objectAtIndex:indexPath.row]];
cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"photo-frame.png"]];
for (UIView *view in cell.subviews) 
    if ([view isKindOfClass:[UILabel class]]) 
        [view removeFromSuperview];
    



UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(5, 0, 150, 170)];//Set the frame as per your requirement.
label.font=[UIFont systemFontOfSize:10];

[label setText:[NSString stringWithFormat:@"%@",[categoryArray objectAtIndex:indexPath.row]]];
[cell addSubview:label];
//NSLog(@"hiiiii");


return cell;

【问题讨论】:

点击图片后,你想在不同的视图控制器中显示另一个集合视图控制器吗?你只需要像你一样推送包含 UICollectionView 的新视图控制器。 【参考方案1】:

如果您想在另一个视图控制器中显示第二个集合视图,您只需将包含集合视图的视图控制器推送到 didSelectItemAtIndexPath:

如果您想在同一个视图控制器中显示第二个集合视图,您可以创建两个集合视图并将第二个设置为隐藏。然后在didSelectItemAtIndexPath: 中,您可以将第二个集合视图设置为显示,将第一个集合视图设置为隐藏。这将通过collectionView.hidden = YES or NO.

完成

【讨论】:

【参考方案2】:

要在单击另一个UICollectionViewController 中的项目时显示另一个UICollectionViewController,您必须使用didSelectItemAtIndexPath 函数。你可以这样做:

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath

    int itemNo = (int)[indexPath row]+1;
    CollectionViewCell *selectedCell = (CollectionViewCell*)[collectionView cellForItemAtIndexPath:indexPath];
    switch (itemNo) 
        case 1:
        
             //perform segue to another UICollectionViewController.
        
        case 2:
        
             //perform segue to another UICollectionViewController.
        
        .
        .
        .
     

这里itemNo 是从集合视图中单击的项目(单元格)。如果您必须为所有项目点击重定向到相同的UICollectionViewController,那么您将不需要switch,您可以直接使用Segue。

希望这会有所帮助。

【讨论】:

以上是关于如何在集合视图中单击单元格时创建按钮操作的主要内容,如果未能解决你的问题,请参考以下文章

表格视图在按钮单击时更新单元格时反弹

集合视图单元格显示

在集合视图单元格 Swift 中管理多个进度视图

单击collectionView单元格时如何打开不同的视图控制器

使用单元格中的按钮转到详细视图控制器

在我的视图集合中,我添加了一个搜索栏,它过滤了单元格,但是当我单击单元格时,它自己的路径没有改变