首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在UICollectionViewCell 7中刷新UICollectionViewCell?

如何在UICollectionViewCell 7中刷新UICollectionViewCell?
EN

Stack Overflow用户
提问于 2013-08-30 19:04:48
回答 3查看 3.9K关注 0票数 9

我正在尝试用Xcode 5开发我的应用程序,并在iOS 7环境下调试它。

我有一个定制的UICollectionViewLayoutAttributes。

我计划在长时间按UICollectionViewCell之后做一些事情,所以我重写了UICollectionViewCell.m中的方法

代码语言:javascript
运行
复制
- (void)applyLayoutAttributes:(MyUICollectionViewLayoutAttributes *)layoutAttributes
{
    [super applyLayoutAttributes:layoutAttributes];
    if ([(MyUICollectionViewLayoutAttributes *)layoutAttributes isActived])
    {
        [self startShaking];
    }
    else
    {
        [self stopShaking];
    }
}

在iOS 6或更低版本中,在调用下面的语句之后调用- applyLayoutAttributes:

代码语言:javascript
运行
复制
UICollectionViewLayout *layout = (UICollectionViewLayout *)self.collectionView.collectionViewLayout;
[layout invalidateLayout];

但是,在iOS 7中,即使我重新加载了CollectionView,也不会调用- applyLayoutAttributes:

这是苹果公司以后要解决的问题,还是我必须做些什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-27 16:04:45

在iOS 7中,必须在UICollectionViewLayoutAttributes子类中重写isEqual:以比较所拥有的任何自定义属性。

isEqual:的默认实现不比较您的自定义属性,因此总是返回YES,这意味着-applyLayoutAttributes:从未被调用。

试试这个:

代码语言:javascript
运行
复制
- (BOOL)isEqual:(id)other {
    if (other == self) {
            return YES;
    }
    if (!other || ![[other class] isEqual:[self class]]) {
            return NO;
    }
    if ([((MyUICollectionViewLayoutAttributes *) other) isActived] != [self isActived]) {
        return NO;
    }

    return YES;
}
票数 23
EN

Stack Overflow用户

发布于 2013-10-06 08:01:58

是。正如Calman所说,您必须重写isEqual:方法来比较您所拥有的自定义属性。见苹果文档这里

如果子类和实现任何自定义布局属性,还必须重写继承的isEqual:方法,以比较属性值。在iOS 7和更高版本中,如果这些属性没有更改,集合视图就不会应用布局属性。它通过使用isEqual:方法比较新旧属性对象来确定属性是否发生了更改。因为此方法的默认实现只检查该类的现有属性,因此必须实现该方法的自己版本才能比较任何其他属性。如果您的自定义属性都相等,则调用Super并在实现结束时返回结果值。

票数 2
EN

Stack Overflow用户

发布于 2014-04-11 12:23:20

在这种情况下,最有效的方法是

代码语言:javascript
运行
复制
- (BOOL)isEqual:(id)other {
        if (other == self) {
            return YES;
        }

        if(![super isEqual:other]) {
            return NO;
        }

        return ([((MyUICollectionViewLayoutAttributes *) other) isActived] == [self isActived]);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18539874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档