在 iOS 6 中,苹果已经创建了一个针对 KKGridView 尝试解决的问题的官方解决方案。更多信息请参考 WWDC 2012 的第 219 场会议。
性能高效的 iOS 网格视图 (MIT 许可证)。 要求:您必须使用支持 自动引用计数 的编译器构建 KKGridView
。我们知道这最初可能很刺耳,但我们坚信,现在要求这样做将为未来提供更好的服务。此外,转向 ARC 大大提高了 KKGridView
的性能。请记住,您的项目无需使用 ARC 即可包含 KKGridView
。
如果您看到某些您不喜欢的内容,您始终可以将其作为问题提交。但如果我们能在您的心中找到它,我们将非常感谢如果您可以自己修复它并向我们发送一个拉取请求。我们承诺不会咬人!
项目的许多功能、错误和缺失项目都在问题部分。目前,在插入后存在定位问题。我们最初打算在公开发布之前修复这些问题,但后来决定现在发布并允许外部贡献。除此之外,编辑和选择是需要工作的唯一其他事情。
KKGridView
于 2011 年 7 月创建,用于在我正在工作的几个应用程序中使用。当我发现这将是既困难又耗时的事情时,我寻求了 Giulio Petek 和 Jonathan Sterling 的帮助。此外,我们聘请了 Kyle Hickinson、Matthias Tretter,最近还聘请了 Peter Steinberger。我们所有人都在现存的网格视图组件上感到沮丧;在这个想法的驱使下,我们着手创建迄今为止 iOS 上最佳的网格视图组件。
当我们开始构建时,我们都有几点共同的事情我们知道我们必须专注于。
UITableView
相似性 — 努力实现尽可能多的直接替换。UITableView
功能;添加任何其他有价值的内容。#import <KKGridView/KKGridView.h>
KKGridViewController就像UITableViewController一样,可以自动为你创建网格视图。仅需创建子类并进行自定义。
作为替代,你可以执行自定义实例化,如下所示。
首先,实例化一个网格视图实例。使用指定的初始化器和黄河 _gridView
常量:
_gridView = [[KKGridView alloc] initWithFrame:self.view.bounds dataSource:self delegate:self];
现在,你可以设置默认的 UIScrollView
和 UIView
属性,因为KKGridView
继承了这些类。
_gridView.scrollsToTop = YES;
_gridView.backgroundColor = [UIColor darkGrayColor];
_gridView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
还需要设置度量(自动大小可能会在将来推出)。
_gridView.cellSize = CGSizeMake(75.f, 75.f);
_gridView.cellPadding = CGSizeMake(4.f, 4.f);
现在,你可以在头文件中设置其他可用的属性。
_gridView.allowsMultipleSelection = NO;
UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 50.f)];
headerView.backgroundColor = [UIColor redColor];
_gridView.gridHeaderView = headerView;
[headerView release] /* For the non-ARC users amongst us */
最后,你可以将网格设为你的视图。
self.view = _gridView;
或者,你也可以将网格添加到视图层次结构中。
[self.view addSubview:_gridView];
- (NSUInteger)gridView:(KKGridView *)gridView numberOfItemsInSection:(NSUInteger)section
{
return kCellCounts[section];
}
可选地,你可以指定你想要在网格中设置多少个部分。(默认是1)
- (NSUInteger)numberOfSectionsInGridView:(KKGridView *)gridView
{
return kNumSections;
}
最后必需的方法是返回单元格,就像UITableView一样。虽然我们对您来说更容易实现,因为KKIndexPath
与NSIndexPath
工作方式完全相同,只是将-row
替换为-index
。KKGridViewCell
就像UITableViewCell
一样,旨在被继承。
- (KKGridViewCell *)gridView:(KKGridView *)gridView cellForItemAtIndexPath:(KKIndexPath *)indexPath
{
KKGridViewCell *cell = [KKGridViewCell cellForGridView:gridView];
cell.backgroundColor = [UIColor lightGrayColor];
return cell;
}
虽然没有必需的代理方法,所有在UITableView
中实现的方法将很快在KKGridView
中可用。