【问题标题】:How to receive cell highlight actions in UICollectionView subclass?如何在 UICollectionView 子类中接收单元格突出显示操作?
【发布时间】:2015-03-14 23:59:58
【问题描述】:

我想继承一个 UICollectionView(不是 UICollectionViewController),我想知道如何设置它,以便当用户突出显示(或选择)一个单元格时,可以通知集合视图,所以我可以在单元格上执行一点动画。你可能会问为什么我不能在视图控制器中这样做。我选择继承 UICollectionView 以便它可以重用。我对 iOS 编程比较陌生,欢迎任何建议或想法。

【问题讨论】:

    标签: ios objective-c swift


    【解决方案1】:

    您可以使用块 ^{}

    使用 .xib 文件创建一个类。 .xib 文件将用于每个单元格。

    在您的 .xib 文件中,添加一个清晰的 UIButton,使其位于所有子视图之上。所以用户可以点击它。

    在你的 .h 文件中添加

    @property (copy, nonatomic) void (^actionBlock)(void);
    

    在您的 .m 文件中添加并将其链接到 .xib 文件中的 UIButton

    - (IBAction)showAnimation:(id)sender
    {
        if (self.actionBlock) {
            self.actionBlock();
        }
    }
    

    现在在 UICollectionViewController、cellForItemAtIndexPath 中调用块

    - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
                      cellForItemAtIndexPath:(NSIndexPath *)indexPath
    {
    MyCellClass *cell = 
            [collectionView dequeueReusableCellWithReuseIdentifier:@"cell"
                                                      forIndexPath:indexPath];
    
        cell.actionBlock = ^{
    //Here you have access to indexPath.section and indexPath.row
            NSLog(@"Going to animate the cell %@ x %@", indexPath.section, indexPath.row);
    
    //do any other code for this specific cell
    };
    
    return cell;
    }
    

    使用动作块,就像打开一个通往每个单元格的门户,快乐编码

    【讨论】:

    • 谢谢,但我可以将 UICollectionView 设置为自身的委托吗?
    • 如果你愿意,你可以,但首先我会让 UICollectionViewController 自动处理。
    【解决方案2】:

    UICollectionView 是视图,UICollectionViewController 是视图控制器。

    您正在继承的UICollectionView 用于更新用户界面,并在突出显示(或选择)单元格时触发viewController 的核心逻辑。 因此,您应该在 viewController 中设置选定的逻辑。

    如果您了解委托模式,则在选中时更新UICollectionView 的单元格的常规方法是使用委托。当触发某些事情时,调用 viewcontroller 为您执行此操作。

    查看这些链接 Cocoa MVC Design Pattern 和 Designing Your Data Source and Delegate for CollectionView。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-18
      • 1970-01-01
      • 2022-06-16
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多