2016-10-10 2 views
0

Ich muss eine Änderung an einer App, die wir entwickeln, und bin kein Vollzeit-iOS-Entwickler. Ich versuche, eine pinterest wie Schnittstelle für einen iOS-App zu bekommen und arbeite durch das Tutorial hier: https://www.raywenderlich.com/107439/uicollectionview-custom-layout-tutorial-pinterestüberschreiben eine Methode in UICollectionViewLayout in Swift mit einem Fehler

In ihrer Gewohnheit UICollectionViewLayout, sie layoutAttributesForElementsinRect außer Kraft setzen, aber ich bin einen Fehler aus den XCode 8 Compiler bekommen (obwohl lief Verwenden Sie die ältere Swift-Sprachversion auf Ja.

Der Fehler, den ich bekommen ist: Method does not override any method from its superclass

Der abgekürzte Code lautet:

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 
    } 

Wenn ich schalte die Methode privat kompiliert es aber nicht funktioniert und wenn ich die Überschreibung entfernen, gibt es mir ein Konflikt. Ich möchte die zugrunde liegende Methode außer Kraft setzen, bin mir aber nicht sicher, wie ich das zum Laufen bringen soll.

Antwort

5

Sie haben die falsche Methodensignatur. Dies ist der Grund, warum das Schlüsselwort override existiert. Es stellt sicher, dass eine API-Änderung auf diese Weise abgefangen wird, anstatt dass die Außerkraftsetzung stillschweigend nicht stattfindet, was zu schwer zu diagnostizierenden Problemen führt.

Es sollte

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

sein Das ist, weil die erwähnte Tutorial-Code über Swift 2.x geschrieben, nicht 3,0 –

+0

@Ahmad Ja, das ist die eigentliche Ursache. Der Fehler, der durch den (jetzt) ​​missbräuchlichen Einsatz des Schlüsselworts "override" ausgelöst wird, ist das Symptom, mit dem Sie es abfangen können. – Alexander

+0

thx - das war das Problem – timpone

Verwandte Themen