我想继承一个UICollectionView(不是UICollectionViewController),我想知道如何设置它,以便当用户突出显示(或选择)一个单元格时,可以通知集合视图,所以我可以在单元格上执行一些动画。您可能会问为什么我无法在视图控制器中执行此操作。我选择子类UICollectionView,以便它可以重用。我对iOS编程比较陌生,我欢迎任何建议或想法。
答案 0 :(得分:0)
UICollectionView
是视图,UICollectionViewController
是viewController。
您正在进行子类化的UICollectionView
用于更新用户界面,并在突出显示(或选择)单元格时触发viewController的核心逻辑。
因此,您应该在viewController
。
如果您了解委托模式,则在选择时更新UICollectionView
单元格的正常方法是使用委托。当触发某些事情时,请调用viewcontroller为您执行此操作。
查看以下链接 Cocoa MVC Design Pattern和Designing 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;
}
使用动作块,就像在每个单元格中打开一个门户网站,快乐编码