# FSGridView **Repository Path**: aws10086/FSGridView ## Basic Information - **Project Name**: FSGridView - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-06-19 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # FSGridView iOS网格视图,主要用于类似股票、课程表、属性表。 使用CollectionViewCell定制,重用机制,标准数据源委托协议,更容易嵌入。 #### 版本修改 | 版本 | 修改内容 | | ---- | ---- | | v1.0.1 | 增加滚动阴影、右侧指示视图 | | v1.0.2 | 增加ReloadData、增加ContentSize(用于滚动处理)、私有方法保护 | 请查看workspace工中的**Example**示例项目。 下载后,您将需要运行pod install。 # 示例效果 # 示例代码 ### 添加FSGridView ```obj-c #pragma mark - Life Cycle - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [self setupData]; [self setupSubviews]; [self setupConstraints]; } #pragma mark - Private Methods - (void)setupSubviews { self.view.backgroundColor = UIColor.whiteColor; [self.view addSubview:self.gridView]; [self.gridView addSubview:self.leftSideFadeView]; [self.gridView addSubview:self.rightSideIndicatorView]; } - (void)setupConstraints { [self.gridView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.bottom.equalTo(self.view); make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop); }]; CGFloat originX = [self gridView:self.gridView widthForColumn:0];; [self.leftSideFadeView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(@(originX)); make.width.equalTo(@(10.0f)); make.top.bottom.equalTo(self.gridView); }]; CGFloat originY = ([self gridViewHeightForHeader:self.gridView] - 10.0f) / 2.0f; [self.rightSideIndicatorView mas_makeConstraints:^(MASConstraintMaker *make) { make.right.equalTo(self.gridView); make.width.height.equalTo(@(10.0f)); make.top.equalTo(self.gridView).offset(originY); }]; } #pragma mark - property - (FSStockGridView *)gridView { if (!_gridView) { _gridView = [[FSStockGridView alloc] init]; _gridView.backgroundColor = UIColor.whiteColor; [_gridView registerClass:FSStockMetaDataCell.class forCellWithReuseIdentifier:NSStringFromClass(FSStockMetaDataCell.class)]; [_gridView registerClass:FSStockTextCell.class forCellWithReuseIdentifier:NSStringFromClass(FSStockTextCell.class)]; _gridView.dataSource = self; _gridView.delegate = self; } return _gridView; } ``` ### 实现FSGridView的数据源和委托协议 ``` #pragma mark - /// 多少列 /// @param gridView 网格视图 - (NSInteger)numberOfColumnsInGridView:(FSGridView *)gridView { return FSStockCellViewModel.numbersOfStockProperty; } /// 多少行 /// @param gridView 网格视图 - (NSInteger)numberOfRowsInGridView:(FSGridView *)gridView { return self.stockViewModels.count; } /// 列宽 /// @param gridView 网格视图 - (CGFloat)gridView:(FSGridView *)gridView widthForColumn:(NSInteger)column { FSStockCellPropertyType type = column; switch (type) { //名字 case FSStockCellPropertyTypeName: { return FSStockMetaDataCell.cellWidth; } //价格 case FSStockCellPropertyTypePrice: { return 80.0f; } //涨幅 case FSStockCellPropertyTypeIncreaseAmout: { return 80.0f; } //总市值 case FSStockCellPropertyTypeTotalMarketValue: { return 80.0f; } //总股本 case FSStockCellPropertyTypeTotalCapital: { return 80.0f; } //市盈率 case FSStockCellPropertyTypePERatio: { return 80.0f; } case FSStockCellPropertyTypeCount: { return 80.0f; } } } /// 行高 /// @param gridView 网格视图 - (CGFloat)gridView:(FSGridView *)gridView heightForRow:(NSInteger)row { return FSStockMetaDataCell.cellHeight; } /// 固定头部高度 /// @param gridView 网格视图 - (CGFloat)gridViewHeightForHeader:(FSGridView *)gridView { return FSStockTextCell.cellHeight; } /// 返回对应的单元 /// @param gridView 网格视图 /// @param row 行位置 /// @param column 列位置 - (UICollectionViewCell *)gridView:(FSGridView *)gridView cellForRow:(NSInteger)row column:(NSInteger)column inGridCell:(nonnull FSGridViewCell *)girdCell { FSStockCellViewModel *cellVM = [self.stockViewModels objectAtIndex:row]; if (!column) { FSStockMetaDataCell *cell = (FSStockMetaDataCell *)[gridView dequeueReusableCellWithReuseIdentifier:NSStringFromClass(FSStockMetaDataCell.class) column:column inGridCell:girdCell]; [cell setContentWithCellVM:cellVM]; return cell; } else { FSStockTextCell *cell = (FSStockTextCell *)[gridView dequeueReusableCellWithReuseIdentifier:NSStringFromClass(FSStockTextCell.class) column:column inGridCell:girdCell]; cell.label.attributedText = [cellVM stockProperyTextAtIndex:column]; return cell; } } /// 返回对应的单元(固定头部区域) /// @param gridView 网格视图 /// @param girdCell 网格对应的行Cell /// @param column 列位置 - (UICollectionViewCell *)gridView:(FSGridView *)gridView cellForHeaderWithColumn:(NSInteger)column inGridCell:(FSGridViewCell *)girdCell { FSStockTextCell *cell = (FSStockTextCell *)[gridView dequeueReusableCellWithReuseIdentifier:NSStringFromClass(FSStockTextCell.class) column:column inGridCell:girdCell]; cell.label.text = [FSStockCellViewModel stockProperyDescTextAtIndex:column]; return cell; } #pragma mark - /// 点击对应的视图 /// @param gridView 网格视图 /// @param row 对应的行 /// @param column 对应的列 - (void)gridView:(FSGridView *)gridView didSelctedAtRow:(NSInteger)row column:(NSInteger)column { } /// 点击对应的视图(固定头部区域) /// @param gridView 网格视图 /// @param column 对应的列 - (void)gridView:(FSGridView *)gridView didSelctedHeaderWithColumn:(NSInteger)column { } ``` ### 滚动处理 由于滚动处理的业务是各自定制化需求,所以开发者可自行根据需要,集成FSGridView进行滚动处理的方式: 1.继承FSGridView,提供gridViewDidScrollBlock、gridViewDidEndDeceleratingBlock、gridViewDidEndDraggingBlock的属性 2.包含FSGridView, 提供gridViewDidScrollBlock、gridViewDidEndDeceleratingBlock、gridViewDidEndDraggingBlock的属性 3.Demo工程中**FSStockGridView**直接使用