gpt4 book ai didi

ios - 将 Collection View 单元格的 subview 发送到后面会阻止它更改 backgroundColor

转载 作者:行者123 更新时间:2023-11-28 21:38:43 25 4
gpt4 key购买 nike

我有一个自定义的 UICollectionViewCell,我正在向它的 contentView 添加一个 subview ,这样它的删除按钮看起来就像悬停在单元格的一角,但有点有点超出范围(就像跳板中应用程序的删除按钮一样)。一切正常,但是当我在突出显示或选择单元格后尝试更改此 subview insetView.backgroundColor 时,它不会更改。

UICollectionViewCell

- (void) layoutSubviews
{
[super layoutSubviews];

self.insetView = [[UIView alloc] initWithFrame:CGRectInset(self.bounds, self.bounds.size.width/64, self.bounds.size.height/16)];
self.insetView.layer.cornerRadius = 6;
self.insetView.layer.masksToBounds = YES;
self.insetView.backgroundColor = [UIColor colorWithRed:65/255.0 green:166/255.0 blue:42/255.0 alpha:1];
[self.contentView addSubview:self.insetView];
[self.contentView sendSubviewToBack:self.insetView];
self.backgroundColor = [UIColor blackColor];
}

CollectionViewController

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
JamCollectionViewCell *cell = (JamCollectionViewCell*)[collectionView cellForItemAtIndexPath:indexPath];
UIView *v = [[cell.contentView subviews] firstObject];
v.backgroundColor = [UIColor lightGrayColor];
}

我也试过

- (void)collectionView:(UICollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath
{
JamCollectionViewCell *cell = (JamCollectionViewCell*)[collectionView cellForItemAtIndexPath:indexPath];
cell.insetView.backgroundColor = [UIColor lightGrayColor];
}

并尝试了我所有的组合。 e.尝试通过其顺序获取 subview 并在 didHighlightItemAtIndexPath 中更改其背景颜色并尝试通过其属性名称获取 subview cell.insetView 并在didSelectItemAtIndexPath 但没有任何效果。

有趣的是,如果 subview cell.insetView 没有发送到 cell.contentView 的后面,它确实 以任何方式响应改变背景颜色。因此问题标题。

很抱歉问了这么长的问题,感谢您的帮助。

最佳答案

UICollectionViewUICollectionViewCellselecthighlight 内置了状态管理,但是没有可见的响应它。您可以尝试将此逻辑移动到您的 UICollectionViewCell 子类中,您可能会发现您的运气更好。

如果您从 NIB 或 Storyboard 加载代码,您可以覆盖 awakeFromNib 以创建自定义背景 View (或将其添加到 Storyboard 中并通过 将其连接到单元格IBOutlet).否则将它添加到您创建其他 View 的任何位置。

然后您可以在您的自定义子类中覆盖 setSelected:setHighlighted:(记得调用 super)以根据当前状态调整颜色。作为选择状态的实现,我已经多次这样做了,它在 iOS 9 中继续工作。

海报的代码:

(void)setSelected:(BOOL)selected {
[super setSelected:selected];
if (selected) {
self.insetView.backgroundColor = [UIColor lightGrayColor];
}
else {
self.insetView.backgroundColor = [UIColor colorWithRed:65/255.0 green:166/255.0 blue:42/255.0 alpha:1];
}
}

关于ios - 将 Collection View 单元格的 subview 发送到后面会阻止它更改 backgroundColor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32916511/

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