【问题标题】:How would you implement a dataSource object for an UIScrollView?你将如何为 UIScrollView 实现 dataSource 对象?
【发布时间】:2009-05-08 11:30:48
【问题描述】:

如果我错了,请告诉我:

我创建了一个新类 ScrollViewDataSource。该类符合我在委托中为滚动视图创建的协议。嗯,它是一个非常特殊的委托,它在滚动时会做一些非常复杂的事情。因此,此委托在初始化时接收该数据源对象。数据源对象现在有一个方法

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

因此,当用户滚动时,代理会在滚动期间多次响铃数据源对象以请求数据。我将在滚动期间回收视图。这意味着,如果用户向下滚动,我会从上到下删除视图,并用新数据填充它们。

NSArray 包含 UIView 对象,这些对象将在滚动期间适当定位。此外,在第一次启动包含滚动视图的视图时,数据源将传递数据以显示第一个可见内容。

这是一个好的模式,还是你有更好的想法? 顺便说一句:我知道 UITableView 做了类似的事情。但我想学那个。这对我来说是一种练习。谢谢!

【问题讨论】:

  • 您好,您能分享一下您是如何实现视图回收的想法吗?我正在努力通过页面控制获得优化的滚动性能。

标签: iphone cocoa-touch uikit uiview uiscrollview


【解决方案1】:

五月,

这是您可以使用的最佳模式。在 iPhone 中的 UITableView 和 Mac 中的 NSTableView、NSOutlineView 等各种数据显示视图中,Apple 独家紧随其后。

一切顺利。

【讨论】:

    【解决方案2】:

    如果您的内容视图使用相同的布局,我会让 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 中的所有滚动、布局、重绘和内容更新内容,并且不会打扰外部的其他视图或控制器。

    但是,如果您的内容视图彼此完全不同,我不会使用这样的模式。

    【讨论】:

      猜你喜欢
      • 2018-04-13
      • 2017-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 2018-05-07
      • 2020-10-06
      相关资源
      最近更新 更多