从XIB加载AQGridViewCell(不工作)

我正在使用AQGridView类,我想从XIB加载单元格。 我已经像UITableView的自定义单元格一样设置了XIB ,但是当我尝试加载单元格时,它仅仅是空白的。 我想知道是否有更简单的方法来获取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 ); } 

这里有一篇文章介绍了如何使用示例代码从nib加载AQGridViewCell。 看看“可重用的AQGridViewCell”部分。

(感谢pt2ph8指出contentView 。)

从我所理解的,我认为它显示为空白,因为显示的是单元格的contentView 。 我最终从IB加载我的自定义视图,并添加它作为该单元格的请求时,单元格的contentView子视图。

AQGridView的开发者曾经在GitHub上声称,将来会增加适当的IB支持,但是这个post的date是2010年8月,所以不要屏住呼吸。

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

  1. 创build一个AQGridViewCell的子类 – 让我们称之为MyGridViewCell
  2. 为这个单元创build一个笔尖,在IB中连接它。
  3. 在IB中查看单元格视图的顶部。 这是正确的,一个视图顶部的观点。 使大小完全相同。
  4. 对于视图顶部的视图(我们称之为view2 ),将tag属性(可以在IB中完成)设置为1。
  5. 把所有你想要连接起来的东西放在view2 ,装饰你的细胞,不pipe你喜欢什么。
  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; } 

请享用!

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

RootViewController.h

 @interface RootViewController : UITableViewController { ApplicationCell *tmpCell; } 

RootViewController.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方法的副作用,通过Nib加载机制在RootViewController上设置tmpCell属性。

你可以做的是做你的xib(uiview)解包/加载在子类本身(它有一个不同的初始化方法比一个可用的viewcell),你也可以连接到这个xib的任何sockets,并添加其整个视图作为子视图,或者也许replacecontentview)。

为了使它更快,你可以使这个xib的uinib,并重新使用它来保存磁盘I / O。

通常使用IB构build你的单元,然后在你的AQGridViewCell的子类中添加

 - (void)awakeFromNib{ self.contentView.backgroundColor = [UIColor clearColor]; }