I a créé une sous-classe de UICollectionView
et dans cette sous-classe je veux override setters de dataSource
et delegate
propriétés.délégué Override et setters DataSource dans la sous-classe UICollectionView
Il utilise d'autres propriétés segmentSelectionDelegate
et segmentDataSource
(qui peuvent être définies par l'appelant) pour remplir les données. Je souhaite interdire la définition des propriétés dataSource originales et des propriétés déléguées par l'appelant, car la sous-classe elle-même est la source de données et le délégué.
Comment puis-je faire cela?
Ci-dessous est ce que j'ai fait, mais il génère une erreur: La source de données n'est pas définie.
fichier d'interface:
@class ZISegmentCollectionView;
@protocol ZISegmentCollectionViewDelegate <NSObject>
-(void)segmentCollectionView:(ZISegmentCollectionView *)collectionView didSelectSegmentWithName:(NSString *)segmentName;
@end
@protocol ZISegmentCollectionViewDataSource <NSObject>
-(NSUInteger)segmentCollectionView:(ZISegmentCollectionView *)collectionView badgeCountForSegment:(NSString *)segmentName;
-(NSString *)segmentCollectionView:(ZISegmentCollectionView *)collectionView nameForSegmentAtIndexPath:(NSIndexPath *)indexPath;
-(NSUInteger)numberOfSegmentsInSegmentCollectionView:(ZISegmentCollectionView *)collectionView;
@end
@interface ZISegmentCollectionView : UICollectionView
@property(nonatomic, readonly) NSString * selectedSegmentName;
@property(nonatomic, weak) id<ZISegmentCollectionViewDelegate> segmentSelectionDelegate;
@property(nonatomic, weak) id<ZISegmentCollectionViewDataSource> segmentDataSource;
@end
I synthétisé délégué et propriétés dataSource dans UICollectionView
sous-classe:
@synthesize dataSource = _dataSource;
@synthesize delegate = _delegate;
A écrit setters comme:
-(void)setDataSource:(id<UICollectionViewDataSource>)dataSource
{
if (dataSource == self) {
_dataSource = dataSource;
}
}
-(void)setDelegate:(id<UICollectionViewDelegate>)delegate
{
if (delegate == self) {
_delegate = delegate;
}
}
Vous avez raison! C'est le principe de base du sous-classement que j'ai complètement raté. –
Une idée de comment cela se fait dans swift? –