Как бы вы реализовали объект dataSource для UIScrollView? - PullRequest
0 голосов
/ 08 мая 2009

Скажите, если я не прав с этим:

Я создал новый класс ScrollViewDataSource. Этот класс соответствует протоколу, который я создал в своем делегате для представления прокрутки. Ну, это очень специальный делегат, который делает очень сложные вещи при прокрутке. Таким образом, этот делегат получает этот объект источника данных при инициализации. Объект источника данных теперь имеет метод

  • (NSArray *) subviewsFromIndex: (NSInteger) из индекса в индекс: (NSInteger) в индекс;

поэтому, когда пользователь прокручивает, делегат много раз звонит объекту источника данных во время прокрутки, чтобы запросить данные. Я собираюсь перерабатывать представления во время прокрутки. Это означает, что если пользователь прокручивает страницу вниз, я удаляю виды сверху вниз и заполняю их новыми данными.

NSArray содержит объекты UIView, которые будут располагаться надлежащим образом во время прокрутки. Кроме того, при первом запуске представления, содержащего представление прокрутки, источник данных доставит данные для отображения первого видимого содержимого.

Это хорошая модель, или у вас есть лучшие идеи для этого? Кстати: я знаю, что UITableView делает нечто подобное. Но я хочу научиться этому. Это практика для меня. Спасибо!

Ответы [ 2 ]

1 голос
/ 10 октября 2009

Май

Это лучший шаблон, который вы можете использовать. Исключительно сопровождается Apple в различных своих представлениях отображения данных, таких как UITableView в iPhone и NSTableView, NSOutlineView в Mac.

Всего наилучшего.

0 голосов
/ 11 октября 2009

Если ваши представления контента используют один и тот же макет, я бы создал ScrollViewDataSource, содержащий только те данные, которые необходимы представлениям контента, поэтому мне не нужно выделять / создавать новый UIView для моего UIScrollView при запросе новых данных (поскольку 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 И, не беспокоя других представлений или контроллеров извне.

Но, если ваши представления контента полностью отличаются друг от друга, я не буду использовать такой шаблон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...