如果您的内容视图使用相同的布局,我将使 ScrollViewDataSource 仅包含内容视图所需的数据,因此在询问新数据时我不需要为我的 UIScrollView 分配/创建新的 UIView(因为 MyScrollView 持有我的内容视图可以重复使用):
@interface MyScrollView : UIView {
@private
id <MyScrollViewDelegate> _delegate;
id <MyScrollViewDataSource> _dataSource;
UIScrollView *_scrollView;
NSMutableArray *_contentViews; // you need to create/maintain/reuse contentView from here
}
@property (nonatomic, assign) id <MyScrollViewDelegate> delegate;
@property (nonatomic, assign) id <MyScrollViewDataSource> dataSource;
@end
@protocol MyScrollViewDataSource <NSObject>
@optional
- (NSString *)myScrollView:(MyScrollView *)myScrollView requestTitleForContentViewAtIndex:(NSInteger)index;
- (UIImage *)myScrollView:(MyScrollView *)myScrollView requestLogoForContentViewAtIndex:(NSInteger)index;
@end
...
这样做的好处是,您的 MyScrollView 界面对于超级视图来说看起来很干净,并且您正在处理 MyScrollView 中的所有滚动、布局、重绘和内容更新内容,并且不会打扰外部的其他视图或控制器。
但是,如果您的内容视图彼此完全不同,我不会使用这样的模式。