- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
根据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/
有没有一种方法可以“标记”对象的属性,使它们在反射中“突出”? 例如: class A { int aa, b; string s1, s2; public int AA
我是一名优秀的程序员,十分优秀!