gpt4 book ai didi

ios - 在哪里突出显示 UICollectionViewCell : delegate or cell?

转载 作者:IT王子 更新时间:2023-10-29 07:44:57 24 4
gpt4 key购买 nike

根据Collection View Programming Guide应该在 UICollectionViewDelegate 中处理单元格高亮显示的视觉状态。像这样:

- (void)collectionView:(PSUICollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath
{
MYCollectionViewCell *cell = (MYCollectionViewCell*)[collectionView cellForItemAtIndexPath:indexPath];
[cell highlight];
}

- (void)collectionView:(UICollectionView *)collectionView didUnhighlightItemAtIndexPath:(NSIndexPath *)indexPath
{
MYCollectionViewCell *cell = (MYCollectionViewCell*)[collectionView cellForItemAtIndexPath:indexPath];
[cell unhighlight];
}

我不喜欢这种方法的地方在于,它向委托(delegate)添加了非常特定于单元格的逻辑。事实上,UICollectionViewCell 通过 highlighted 属性独立管理其高亮状态。

那么重写 setHighlighted: 不是一个更简洁的解决方案吗?

- (void)setHighlighted:(BOOL)highlighted
{
[super setHighlighted:highlighted];
if (highlighted) {
[self highlight];
} else {
[self unhighlight];
}
}

与委托(delegate)方法相比,这种方法有什么缺点吗?

最佳答案

如文档所述,您可以依靠 highlighted 属性在单元格突出显示时进行更改。例如,下面的代码将使单元格在突出显示时变为红色(尽管不是它的 subview ):

- (void)setHighlighted:(BOOL)highlighted {
[super setHighlighted:highlighted];
[self setNeedsDisplay];
}

- (void)drawRect:(CGRect)rect {
[super drawRect:rect];

if (self.highlighted) {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetRGBFillColor(context, 1, 0, 0, 1);
CGContextFillRect(context, self.bounds);
}
}

如果你添加这样的东西,背景会变成紫色(红色+不透明蓝色):

- (void)collectionView:(UICollectionView *)colView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewCell *cell = [colView cellForItemAtIndexPath:indexPath];
cell.contentView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:1 alpha:0.5];
}

- (void)collectionView:(UICollectionView *)colView didUnhighlightItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewCell *cell = [colView cellForItemAtIndexPath:indexPath];
cell.contentView.backgroundColor = nil;
}

因此您可以同时使用两者(不一定都改变单元格外观)。不同之处在于,对于委托(delegate)方法,您还拥有 indexPath。它可能用于创建多选(您将与选择委托(delegate)方法一起使用此方法),在突出显示单元格时显示一些预览,显示一些带有其他 View 的动画......这个委托(delegate)有很多应用我认为的方法。

作为结论,我会让单元格外观由单元格本身处理,并使用委托(delegate)方法让 Controller 同时做出一些很酷的事情。

关于ios - 在哪里突出显示 UICollectionViewCell : delegate or cell?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15483229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com