覆盖Swift中UICollectionViewLayout中的方法并出现错误

时间:2016-10-10 22:05:07

标签: ios objective-c

我需要对正在开发的应用程序进行更改,而不是全职iOS开发人员。我正试图为iOS应用程序获得一个类似于pinterest的界面,并且我正在完成这个教程:https://www.raywenderlich.com/107439/uicollectionview-custom-layout-tutorial-pinterest

在他们的自定义UICollectionViewLayout中,它们覆盖layoutAttributesForElementsinRect,但我从XCode 8编译器收到错误(尽管使用将Legacy Swift语言版本设置为是)。

我得到的错误是:Method does not override any method from its superclass

缩写代码为:

class PinterestLayout: UICollectionViewLayout {

  ....
  override func layoutAttributesForElementsInRect(rect: CGRect) -> [AnyObject]? {

    var layoutAttributes = [UICollectionViewLayoutAttributes]()

    // Loop through the cache and look for items in the rect
    for attributes  in cache {
      if CGRectIntersectsRect(attributes.frame, rect ) {
        layoutAttributes.append(attributes)
      }
    }
    return layoutAttributes
  }

如果我将方法切换为私有它编译但不起作用,如果我删除覆盖,它会给我一个冲突。我想覆盖底层方法,但不知道如何让它工作。

1 个答案:

答案 0 :(得分:5)

您的方法签名错误。这实际上是override关键字存在的原因。它确保将像这样捕获API更改,而不是默默地不发生覆盖,从而导致难以诊断问题。

应该是

override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]?