Я создал подкласс UICollectionView
и в этом подклассе я хочу переопределить сеттеры dataSource
и delegate
свойств.Override делегат и DataSource сеттеры в UICollectionView подкласса
Он использует другие объекты segmentSelectionDelegate
и segmentDataSource
(которые могут быть установлены вызывающим абонентом) для заполнения данных. Я хочу запретить установку исходных данныхSource и делегировать свойства вызывающим, потому что сам подкласс является dataSource и делегатом.
Как я могу это сделать?
Ниже я пишу об ошибке: Источник данных не задан.
файл интерфейса:
@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
Я синтезируется делегат и DataSource свойства в UICollectionView
подкласса:
@synthesize dataSource = _dataSource;
@synthesize delegate = _delegate;
писал сеттеры как:
-(void)setDataSource:(id<UICollectionViewDataSource>)dataSource
{
if (dataSource == self) {
_dataSource = dataSource;
}
}
-(void)setDelegate:(id<UICollectionViewDelegate>)delegate
{
if (delegate == self) {
_delegate = delegate;
}
}
Вы на самом деле правы! Это основной принцип подкласса, который я пропустил полностью. –
Любая идея, как это делается в быстрой? –