如何在UICollectionView子类中接收单元格高亮操作?

时间:2015-03-14 14:23:16

标签: ios objective-c swift

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

2 个答案:

答案 0 :(得分:0)

UICollectionView是视图,UICollectionViewController是viewController。

您正在进行子类化的UICollectionView用于更新用户界面,并在突出显示(或选择)单元格时触发viewController的核心逻辑。 因此,您应该在viewController

中设置所选逻辑

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

查看以下链接 Cocoa MVC Design PatternDesigning Your Data Source and Delegate for CollectionView

答案 1 :(得分:0)

您可以使用块^ {}

使用 .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;
}

使用动作块,就像在每个单元格中打开一个门户网站,快乐编码