2009-05-08 13 views
0

私にそれが間違っているかどうか教えてください:UIScrollViewのdataSourceオブジェクトをどのように実装しますか?

新しいクラスScrollViewDataSourceを作成しました。そのクラスは、スクロールビューのデリゲート内で作成したプロトコルに準拠しています。まあ、それはスクロール時に非常に複雑なものを行う非常に特別な代理人です。したがって、このデリゲートは初期化時にそのデータソースオブジェクトを受け取ります。 DataSourceオブジェクトは、現在の方法を有する

  • (にNSArray *)subviewsFromIndex:(NSInteger)たfromIndexたtoIndex:(NSInteger)たtoIndex。

このように、ユーザーがスクロールすると、デリゲートは、データソースオブジェクトを呼び出して、ダンリングスクロールしてデータを要求します。私はスクロール中にビューをリサイクルするつもりです。つまり、ユーザーが下にスクロールすると、上から下にビューが削除され、新しいデータが埋められます。

NSArrayには、スクロール時に適切に配置されるUIViewオブジェクトが含まれています。また、スクロールビューを含むビューの最初の起動時に、データソースはデータを表示して最初に表示される内容を表示します。

これは良いパターンですか、それとも良いアイデアはありますか? ところで:私は知っているUITableView何か似ています。しかし、私はそれを学びたい。それは私のための練習です。ありがとう!

+0

あなたはビューのリサイクルをどのように達成しましたかについてアイデアを共有できますか?私は頭を壊して、ページコントロールでスクロールしてパフォーマンスを向上させようとしています。 –

答えて

1

5月、

これは、あなたが利用できる最良のパターンです。 iPhoneのUITableViewやMacのNSOutlineViewなどのビューを表示するさまざまなデータをAppleが独占しています。

すべて最高です。

0

コンテンツビューで同じレイアウトを使用している場合は、コンテンツビューに必要なデータのみを含むScrollViewDataSourceを作成します。新しいデータを要求するときにUIScrollViewの新しいUIViewを割り当て/作成する必要はありません。私は再利用できるコンテンツビュー):

@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内およびなし外部から他のビューやコントローラーを悩ます。

あなたのコンテンツの表示がお互いに全く異なる場合、私はこのようなパターンを使用しません。

関連する問題