gpt4 book ai didi

ios - 覆盖 UICollectionView 子类中的委托(delegate)和数据源 setter

转载 作者:行者123 更新时间:2023-12-01 18:43:19 25 4
gpt4 key购买 nike

我创建了 UICollectionView 的子类在那个子类中我想覆盖 dataSource 的二传手和 delegate特性。

它使用另一个 segmentSelectionDelegatesegmentDataSource属性(可以由调用者设置)来填充数据。我想禁止调用者设置原始数据源和委托(delegate)属性,因为子类本身就是数据源和委托(delegate)。

我怎样才能做到这一点?

以下是我所做的,但它抛出了一个错误:数据源未设置 .

接口(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

我在 UICollectionView 中合成了委托(delegate)和数据源属性子类:
@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;
}
}

最佳答案

通过在子类中合成属性,您所做的是创建新的实例变量。当父类(super class)代码检查是否设置了数据源时,答案是否定的,因为它的实例变量仍然是nil。 .

删除 synthesize 语句,因为无论如何您都将实现 setter(并且您不需要提供 getter)。

在你最重要的 setter 中,什么都不做。

要设置实际数据源,请调用 [super setDatasource:self] .

关于ios - 覆盖 UICollectionView 子类中的委托(delegate)和数据源 setter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39504113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com