19

我想在我的 iPhone 应用程序中创建一个类似于iPad 照片应用程序中显示的网格视图。是否有可用于添加此类功能的库或框架(非 SDK)?理想情况下,我希望最终开发一个 iPad 版本的应用程序,其中网格的纵向宽度为 3 个项目,横向宽度为 4 个,但是目前我希望纵向宽度为 2 个项目,横向宽度为 3 个。

我能想到的唯一方法是继承 UITableView 并拥有一个创建 2 或 3 个项目的自定义单元格。然而,这似乎很混乱,我相信有更好的方法。

一个典型的项目会有一个图片、标签和按钮——没什么太复杂的。

4

6 回答 6

25

对于 iOS 6 及更高版本,我推荐UICollectionViewPSTCollectionView

目标是在 iOS 4/5 上使用 PSTCollectionView 作为后备并在 iOS6 上切换到 UICollectionView。我们甚至使用某些运行时技巧为旧版本的 iOS 在运行时创建 UICollectionView。理想情况下,您只需链接文件,一切都可以在旧系统上运行。

在 2010 年我推荐了 AQGridView

于 2010-09-18T19:01:04.797 回答
10

我知道这已经很老了,但我正在寻找答案并测试了几种解决方案。我发现 GMGridView 是最好的、错误最少的解决方案之一。在https://github.com/gmoledina/GMGridView查看。

于 2011-12-28T00:30:42.520 回答
9

您仍然可以为此使用 UITableView,并且不需要对其进行子类化。就像您说的那样,您所要做的就是创建自己的自定义单元格,这并不复杂。一点也不乱:)

于 2010-02-15T11:30:09.823 回答
2

要在表格视图中创建简单的网格视图,请创建类“GridViewCell”并在头文件中添加:

@interface GridViewCell : UITableViewCell

@property (nonatomic, strong)  UIButton *column1;
@property (nonatomic, strong)  UIButton *column2;
@property (nonatomic, strong)  UIButton *column3;

@end

在 .m 文件中添加以下代码:

#define CELL_WIDTH 100
#define CELL_HEIGHT 80

#import "GridViewCell.h"

@implementation GridViewCell

@synthesize column1, column2, column3;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
    column1 = [[UIButton alloc] initWithFrame:CGRectMake(5, 5, CELL_WIDTH, CELL_HEIGHT)];
    [self addSubview:column1];
    column2 = [[UIButton alloc] initWithFrame:CGRectMake(CELL_WIDTH+ 10, 5, CELL_WIDTH, CELL_HEIGHT)];
    [self addSubview:column2];
    column3 = [[UIButton alloc] initWithFrame:CGRectMake(CELL_WIDTH + CELL_WIDTH + 15, 5, CELL_WIDTH, CELL_HEIGHT)];
    [self addSubview:column3];
}
return self;
}

@end

当您创建表时,在委托 cellForRowAtIndexPath 中使用新类“GridView”:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    GridViewCell *cell = (GridViewCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[GridViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    [cell.column1 setBackgroundColor:[UIColor blackColor]];
    [cell.column2 setBackgroundColor:[UIColor blackColor]];
    [cell.column3 setBackgroundColor:[UIColor blackColor]];

    return cell;
}
于 2012-09-27T14:03:22.553 回答
1

NRGridView 似乎是最好的方法。你可以在这里找到它。

它具有与 UITableView 类似的方法。可以根据需要自定义单元格。

于 2012-05-03T21:41:22.637 回答
-1

我会推荐使用自定义 UITableViewCells。在 iOS 5 中,您不必对它们进行子类化。只需将 tableView 添加到您的项目,使用 Xcode 将原型单元格(=自定义单元格)添加到 tableView,给它们一个唯一标识符并在 cellForRowAtIndexPath 中使用此标识符来出列并实例化您的自定义单元格。然后设置单元格并返回它。

于 2012-02-19T20:34:11.440 回答