DQKFreezeWindowView 0.9.1

DQKFreezeWindowView 0.9.1

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布最后发布2015年7月

DianQK 维护。



  • By
  • DianQK

用于 iOS 的冻结窗口效果视图。
就像 Office Excel 一样。

Demo

注意
如果这个 GIF(3.7 MB) 看起来不合适,请刷新

用法

安装

只需将 pod 'DQKFreezeWindowView' 添加到 Podfile 并运行 pod install

使用

就像使用 UITableView 一样使用 DQKFreezeWindowView,它相似但功能更强大。

在您想要使用的地方导入 #import "DQKFreezeWindowView.h"
初始化 freezeWindowView

DQKFreezeWindowView *freezeWindowView = [[DQKFreezeWindowView alloc] initWithFrame:frame];
    [self.view addSubview:freezeWindowView];
    freezeWindowView.dataSource = self;
    freezeWindowView.delegate = self;

注意
顶端为 sectionCell,左侧为 rowCell

部分实现(dataSource)

- (NSInteger)numberOfSectionsInFreezeWindowView:(DQKFreezeWindowView *)freezeWindowView {
    return 100;
}

- (NSInteger)numberOfRowsInFreezeWindowView:(DQKFreezeWindowView *)freezeWindowView {
    return 100;
}

- (DQKMainViewCell *)freezeWindowView:(DQKFreezeWindowView *)freezeWindowView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *mainCell = @"mainCell";
    DQKMainViewCell *mainCell = [freezeWindowView dequeueReusableMainCellWithIdentifier:mainCell forIndexPath:indexPath];
    if (mainCell == nil) {
        mainCell = [[DQKMainViewCell alloc] initWithStyle:DQKMainViewCellStyleDefault reuseIdentifier:calendarCell];
        mainCell.title = @"mainCell";
    }
    return mainCell;
}

- (DQKSectionViewCell *)freezeWindowView:(DQKFreezeWindowView *)freezeWindowView cellAtSection:(NSInteger)section {
    static NSString *sectionCell = @"sectionCell";
    DQKSectionViewCell *sectionCell = [freezeWindowView dequeueReusableSectionCellWithIdentifier:dayCell forSection:section];
    if (sectionCell == nil) {
        sectionCell = [[DQKSectionViewCell alloc] initWithStyle:DQKSectionViewCellStyleDefault reuseIdentifier:dayCell];
        sectionCell.title = @"sectionCell";
    }
    return sectionCell;
}

- (DQKRowViewCell *)freezeWindowView:(DQKFreezeWindowView *)freezeWindowView cellAtRow:(NSInteger)row {
    static NSString *rowCell = @"rowCell";
    DQKRowViewCell *rowCell = [freezeWindowView dequeueReusableRowCellWithIdentifier:timeCell forRow:row];
    if (rowCell == nil) {
        rowCell = [[DQKRowViewCell alloc] initWithStyle:DQKRowViewCellStyleDefault reuseIdentifier:timeCell];
        rowCell.title = @"rowCell";
    }
    return rowCell;
}

部分实现(delegate)

- (void)freezeWindowView:(DQKFreezeWindowView *)freezeWindowView didSelectIndexPath:(NSIndexPath *)indexPath {
    NSString *message = [NSString stringWithFormat:@"Click at section: %ld row: %ld",(long)indexPath.section,(long)indexPath.row];
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"You did a click!" message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    [alertView show];
}

注意:更多信息请参阅 DQKFreezeWindowViewExampleDQKFreezeWindowViewDemo。我更喜欢 DQKFreezeWindowViewDemo,它很有趣。

其他

何时使用 DQKFreezeWindowView

您可以使用它来

  • 日历
  • 显示数据
  • 课程表
  • 待办事项列表
  • ...

为什么您应该尝试 DQKFreezeWindowView

  1. 物理
    请参考以下图片

右边的图片是 日历 截图。当您使用日历时,在垂直方向滚动视图后,不能立即在水平方向滚动视图,这像一个 Bug。

  1. 强大
    也可以用于显示多种数据

  2. 多路复用
    您可以设置 DQKFreezeWindowView.bounceStyle

更多样式可以在项目的 *.h 文件中查看。

Beta 功能

  • 点击部分到顶部/点击行到左侧
  • 检测单元格位置
  • 一个代理 -- 当单元格位于关键位置时

实现

如果您对我的项目感兴趣,可以查看 OtherSource。我放了一部分实现。

一篇文章(中文)。

待办事项

  • 扩展单元格功能
  • 修复在快速滚动时的某些单元格缺失问题
  • 修复 Beta 的一些错误
  • 添加更多样式

如果您有任何建议或问题,请提出问题或通过微博 @靛青K 进行讨论。我需要您的帮助 ^_^。

此代码按照 MIT 许可协议的条款和条件进行分发。