3

我正在使用AQGridView类,我正在尝试从XIB加载一个单元格。我已经将XIB设置为a 的自定义单元格UITableView,但是当我尝试加载单元格时,它只是空白。我想知道是否有更简单的方法来加载XIB 。

AQGridViewCell需要从 xib 加载单元格

- (AQGridViewCell *) gridView: (AQGridView *) gridView cellForItemAtIndex: (NSUInteger) index
{
    static NSString * CellIdentifier = @"cellID";
    gridCell * cell = (gridCell *)[gridView dequeueReusableCellWithIdentifier: CellIdentifier];
    if ( cell == nil ){
        gridCell = [[gridViewCell alloc] initWithFrame: CGRectMake(0,0,_gridView.frame.size.width/2-4, 
                                                                       _gridView.frame.size.height/2-8) 
                                       reuseIdentifier:CellIdentifier];
        cell = gridCell;
        self.gridCell = nil;
    }

    cell.title = @"Test Grid Item";
    cell.date  = @"Apr. 7, 2011";

    return ( cell );
}
4

6 回答 6

7

这是一篇描述如何从 nib 加载 AQGridViewCell 的文章,带有示例代码。查看名为“A reusable AQGridViewCell”的部分。

(感谢 pt2ph8 指出contentView。)

于 2011-10-31T14:42:51.803 回答
2

据我了解,我认为它显示为空白,因为显示的是单元格的contentView. 我最终从 IB 加载了我的自定义视图,并在contentView请求单元格时将其添加为单元格的子视图。

AQGridView 的开发人员曾经在 GitHub 上声称,将来会添加适当的 IB 支持,但那篇文章的日期是 2010 年 8 月,所以不要屏住呼吸。

于 2011-04-21T11:04:55.643 回答
2

这花了我一段时间,但我想出了与 jlstrecker 提到的博客文章不同的方式。

  1. 创建一个子类AQGridViewCell- 让我们称之为 MyGridViewCell
  2. 为该单元格创建一个笔尖,在 IB 中将其链接起来。
  3. 在 IB 中的单元格视图的顶部发布视图。没错,就是视图之上的视图。使尺寸完全相同。
  4. 对于视图顶部的那个视图(我们称之为view2),将tag属性(可以在 IB 中完成)设置为 1。
  5. 把你想要连接的所有东西放在上面 view2,装饰你的单元格,随心所欲。
  6. 在您的子类中使用以下代码(当然,将其更改为您的需要)AQGridViewController

`

- (AQGridViewCell *)gridView:(AQGridView *)aGridView cellForItemAtIndex:(NSUInteger)index {
    static NSString *CellIdentifier = @"MyGridViewCell";
    MyGridViewCell *cell = (MyGridViewCell *)[self.gridView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = (ZZProductGridViewCell *)[[[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil] objectAtIndex:0];
    }

    [cell.contentView addSubview:[cell viewWithTag:1]]; //THIS IS THE IMPORTANT PART

    return cell;
}

享受!

于 2012-06-25T21:32:53.137 回答
0

您可以做的是在子类本身中进行 xib(uiview)解包/加载(它确实具有与 uitableviewcell 不同的 init 方法)您还可以将任何出口连接到此 xib 并将其整个视图添加为子视图,或者也许替换内容视图)。

为了让它更快,你可以制作这个 xib 的 uinib 并重用它来节省磁盘 i/o。

于 2011-04-08T18:55:45.350 回答
0

我不熟悉 AQGridView,但我相信您可以利用 NSBundle 的 Nib 加载功能。AdvancedTableViewCells 示例项目的摘录说明了这个想法:

RootViewController.h

@interface RootViewController : UITableViewController
{
    ApplicationCell *tmpCell;
}

根视图控制器.m

ApplicationCell *cell = (ApplicationCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil)
{
    [[NSBundle mainBundle] loadNibNamed:@"IndividualSubviewsBasedApplicationCell" owner:self options:nil];
    cell = tmpCell;
    self.tmpCell = nil;
}

在 IndividualSubviewsBasedApplicationCell.xib 中,您必须将 UITableViewCell 的出口设置为 RootViewController 的 tmpCell 属性。然后,作为调用 NSBundle 的 loadNibNamed 方法的副作用,tmpCell 属性通过 Nib 加载机制在 RootViewController 上设置。

于 2011-04-08T02:21:51.167 回答
0

使用 IB 正常构建您的单元格,然后在您的 AQGridViewCell 子类中,添加

- (void)awakeFromNib{
    self.contentView.backgroundColor = [UIColor clearColor];
}
于 2013-01-12T17:56:08.020 回答