0

私が間違っているかどうか教えてください:

新しいクラス ScrollViewDataSource を作成しました。このクラスは、スクロール ビュー用にデリゲート内で作成したプロトコルに準拠しています。これは、スクロール時に非常に複雑なことを行う非常に特殊なデリゲートです。したがって、このデリゲートは、初期化時にそのデータ ソース オブジェクトを受け取ります。データソース オブジェクトにメソッドが追加されました

  • (NSArray*)subviewsFromIndex:(NSInteger)fromIndex toIndex:(NSInteger)toIndex;

そのため、ユーザーがスクロールすると、データを要求するためにスクロール中にデリゲートがデータソース オブジェクトを何度も呼び出します。スクロール中にビューをリサイクルします。つまり、ユーザーが下にスクロールすると、ビューを上から下に削除し、新しいデータで埋めます。

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

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

4

2 に答える 2

1

5月、

これはあなたが利用できる最良のパターンです。iPhone の UITableView や Mac の NSTableView、NSOutlineView など、さまざまなデータ表示ビューで Apple が排他的に続いています。

ではごきげんよう。

于 2009-10-10T18:46:10.197 に答える
0

コンテンツ ビューが同じレイアウトを使用している場合は、コンテンツ ビューが必要とするデータのみを含む 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 内ですべてのスクロール、レイアウト、再描画、およびコンテンツ更新を処理していて、外部から他のビューやコントローラーを気にする必要はありません。

ただし、コンテンツ ビューが互いにまったく異なる場合は、このようなパターンは使用しません。

于 2009-10-10T21:00:01.813 に答える