2015-08-24 2 views
-1

Я пытаюсь создать подкласс UICollectionViewLayout, но я не могу назвать свою первоначальную функциональность, такую ​​как, например, itemSize и я получаю ошибку говоряПодкласс не наследует его функциональность

Свойство «itemSize» не найден объект 'SubClass *'

Что мне не хватает?

Мой код выглядит следующим образом.

.h

#import <UIKit/UIKit.h> 


@interface SubClass : UICollectionViewLayout 

@end 

.m

#import "SubClass.h" 

@implementation SubClass 

- (NSArray *) layoutAttributesForElementsInRect:(CGRect)rect { 
    NSArray *answer = [self layoutAttributesForElementsInRect:rect]; 

    for(int i = 1; i < [answer count]; ++i) { 
     UICollectionViewLayoutAttributes *currentLayoutAttributes = answer[i]; 
     UICollectionViewLayoutAttributes *prevLayoutAttributes = answer[i - 1]; 
     CGFloat maximumSpacing = 20.0f; 
     CGFloat origin = CGRectGetMaxX(prevLayoutAttributes.frame); 
     if(origin + maximumSpacing + currentLayoutAttributes.frame.size.width < self.collectionViewContentSize.width) { 
      CGRect frame = currentLayoutAttributes.frame; 
      frame.origin.x = origin + maximumSpacing; 
      currentLayoutAttributes.frame = frame; 
     } 
    } 
    return answer; 
} 

@end 
+2

Свойство 'itemSize' является частью' UICollectionViewFlowLayout', а не 'UICollectionViewLayout'. Но код, который вы опубликовали, не упоминает 'itemSize'. Покажите нам код, содержащий ошибку. –

+3

Кроме того, код, который вы отправили, вызывает 'layoutAttributesForElementsInRect:' рекурсивно, поэтому, даже если он скомпилирован, вы получите переполнение стека во время выполнения. Вероятно, вы хотели сказать '[super layoutAttributesForElementsInRect: rect]'. –

+0

Doh! как глупо от меня, я слишком устал вчера. Я изменил его на 'UICollectionViewFlowLayout', теперь он отлично работает. Я также изменил его на супер, а не на себя. – vaid

ответ

1

Вы унаследовали от неправильного класса. Объект itemSize является частью UICollectionViewFlowLayout, а не UICollectionViewLayout.

Также вы, вероятно, захотите позвонить [super layoutAttributesForElementsInRect:rect]. Отправка этого сообщения в self приведет к переполнению стека из-за неограниченной рекурсии.

Смежные вопросы