一个 NSScrollView
子类,支持顶部和底部边界的下拉刷新。预期的用法是托管类似时间线视图,显示按逆时间顺序排列的消息列表。
将 RefreshableScrollView.xcodeproj
添加到您的 OS X 项目中,并将 libRefreshableScrollView.a
作为项目依赖项添加到项目。另外,将公共头文件 BSRefreshableScrollView.h
添加到项目的用户头文件搜索路径中。
尝试使用附带示例应用程序,以查看类是如何工作的以及如何使用它。上面的视频演示显示了该示例应用程序的录制。
将 BSRefreshableScrollView
用作 NSScrollView
的替代项。如果您使用 Xcode 的界面构建器添加 NSTableView
或 NSOutlineView
(以及其他一些)的实例,默认情况下,它将在这些对象周围包含一个 NSScrollView
。突出显示该 NSScrollView
容器,转到对象身份检查器,并输入 BSRefreshableScrollView
作为滚动视图的类名。
然后您需要编写一个符合 BSRefreshableScrollViewDelegate
协议的代理。这很可能是 xib
文件的文件所有者 - 一个视图控制器或窗口控制器。将该代理类连接到滚动视图的 refreshableDelegate
端口。
在代理的 awakeFromNib
方法中,设置哪些边支持下拉刷新。这很重要 - 如果不启用这些标志,则 BSRefreshableScrollView
将表现得像普通的 NSScrollView
。如果您不使用 xib
文件,则需要找到一个适当的位置来设置这些标志。请注意,您可以清除这些标志中的任何一个以禁用相应边界的刷新,即使视图已经可见。
-(void)awakeFromNib
{
[super awakeFromNib];
self.refreshableScrollView.refreshableSides = BSRefreshableScrollViewSideTop | BSRefreshableScrollViewSideBottom;
}
在代理中实现方法 scrollView: startRefreshSide:
以启动刷新过程,如果该过程成功启动,则返回 YES
。滚动视图将在适当的边缘显示一个不确定的进度指示器。如果由于某些原因您无法启动该侧的刷新,则简单地返回 NO
,并且滚动视图将表现得像什么都没有发生一样。
#pragma mark BSRefreshableScrollViewDelegate
-(BOOL) scrollView:(BSRefreshableScrollView*) aScrollView startRefreshSide:(BSRefreshableScrollViewSide) refreshableSide
{
if (refreshableSide == BSRefreshableScrollViewSideTop) {
// initiate refresh process for the top edge of the scroll view
// ...
return YES; // tell the scroll view to display the progress indicator
} else if (refreshableSide == BSRefreshableScrollViewSideBottom) {
// initiate refresh process for the bottom edge of the scroll view
// ...
return YES;
}
return NO;
}
当刷新过程完成(即网络服务返回结果或超时)时,调用 stopRefreshingSide:
并给它适当的边界来停止。如果没有在该方向上进行刷新,则调用此方法将没有任何效果。例如
- (IBAction)stopRefreshTop:(id)sender
{
[self.refreshableScrollView stopRefreshingSide:BSRefreshableScrollViewSideTop];
}
本项目采用BSD许可证。如果您用它来做一些有趣的事情,请告诉我([email protected])。
Sasmito Adibowo http://cutecoder.org