3

クラスを使用しており、 XIBAQGridViewからセルをロードしようとしています。のカスタム セルのようにXIBをセットアップしましたが、セルを読み込もうとすると空白になります。XIBをロードする簡単な方法があるかどうか疑問に思っていました。UITableView

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 をロードする方法をサンプル コードとともに説明する記事を次に示します。「再利用可能な AQGridViewCell」というセクションを確認してください。

(指摘してくれたpt2ph8に感謝しcontentViewます。)

于 2011-10-31T14:42:51.803 に答える
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 に答える
2

私が理解したことから、表示されるのはセルのcontentView. contentViewIB からカスタム ビューをロードし、セルが要求されたときにセルのサブビューとして追加することになりました。

AQGridView の開発者はかつて、適切な IB サポートが将来追加されると GitHub で主張しましたが、その投稿は 2010 年 8 月の日付であるため、息を止めないでください。

于 2011-04-21T11:04:55.643 に答える
0

私は AQGridView には詳しくありませんが、NSBundle の Nib 読み込み機能を活用できると思います。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 メソッドを呼び出すことの副作用として、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 に答える
0

あなたができることは、サブクラス自体でxib(uiview)のアンパック/ロードを行うことです(uitableviewcellとは異なるinitメソッドがあります)。このxibにアウトレットを接続して、そのビュー全体をサブビューとして追加することもできます。 contentview を置き換えます)。

さらに高速化するには、この xib の uinib を作成し、それを再利用してディスク I/O を節約できます。

于 2011-04-08T18:55:45.350 に答える