Mac OS 中 NSTableView 加载更多控件的封装

这篇博客介绍了在Mac OS中如何在NSTableView中实现加载更多的功能,由于NSTableView不同于iOS中的UITableView,它不直接继承UIScrollView,因此不能直接通过监听偏移量来实现。作者通过监听NSViewBoundsDidChangeNotification通知,结合NSScrollView来达成类似效果。文章提供了一个基类,该类包含两个主要功能:1) 实现加载更多的逻辑,只需继承并实现delegate;2) 获取滑动结束后的可视cell的rect,以便从数据源中获取相应数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

iOS中 UITableView 是继承于 UIScrollView 的 二 Mac OS 中NSTableView 是继承NSControl 的, 所以 利用偏移量监听实现不了

但是 NSTableView是如何实现滑动了, 和NSScrollView的组合来实现的

 

利用 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(prepareForNewDisplay:) name:NSViewBoundsDidChangeNotification object:[[self enclosingScrollView] contentView]]; 来监听tableView的偏移量

 

以下这个类就是实现刷新的基类

功能点

         1.加载更多 ,继承 然后实现delegate 即可

        2 滑动结束后可得到当前可视cell的rect ,然后 NSRange showRange = [self.tableView rowsInRect:endRect];然后从数据源中取数据

 

#import <Cocoa/Cocoa.h>

typedef enum {
    DMRefreshTableViewStateDefault = 1,    //默认
    DMRefreshTableViewStateTriggered,      //已经可以出发刷新委托事件
    DMRefreshTableViewStateLoading         //正在加载
} DMRefreshTableViewState;

@protocol DMRefreshTableViewDelegate <NSObject>
@optional

- (void)refreshView:(id)view didChangeState:(DMRefreshTableViewState)state;

- (void)refreshViewDidLoading:(id)view; // only footer

- (void) setTableViewIsScrollAnimated:(BOOL)isAnimated
                              endRect:(CGRect)endRect;

@end


@interface DMTableRowView : NSTableRowView

@property (nonatomic, assign) NSInteger nowRowIndex;

@end


@in
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值