MacOS 开发(八):NSCollectionView纯代码实
2020-04-02 本文已影响0人
SoaringHeart
因为系统机制导致,纯代码实现滚动视图的时候必须自己实现 scrollView,随封装如下:

🌰🌰:
- (void)viewDidLoad {
[super viewDidLoad];
// Do view setup here.
[self.view addSubview:self.ctView.enclosingScrollView];
}
- (void)viewDidLayout{
[super viewDidLayout];
[self.ctView.enclosingScrollView makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.ctView.enclosingScrollView.superview);
}];
}
#pragma mark -lazy
-(NNCollectionView *)ctView{
if (!_ctView) {
_ctView = ({
NNCollectionView *view = [[NNCollectionView alloc]initWithFrame:self.view.bounds];
view.collectionViewLayout = [self createFlowLayout];
[view registerClass:NSCTViewCellOne.class forItemWithIdentifier:@"Slide"];
view.selectable = true;
view.dataSource = self;
view.delegate = self;
view;
});
}
return _ctView;
}
视图封装:
class NNCollectionView: NSCollectionView {
lazy var scrollView: NSScrollView = {
let scrollView = NSScrollView()
scrollView.backgroundColor = NSColor.red
scrollView.drawsBackground = false
scrollView.hasHorizontalScroller = true
scrollView.hasVerticalScroller = true
scrollView.autohidesScrollers = true
return scrollView
}()
// MARK: -lifecycle
override init(frame frameRect: NSRect) {
super.init(frame: frameRect)
setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
// Drawing code here.
}
// MARK: -funtions
func setupUI() {
scrollView.documentView = self
}
}