3

URL 接続を使用してコンテンツを非同期にロードするカスタム UITableViewCell サブクラスを作成したいと考えています。これらすべてを処理する UITableViewCell サブクラスと、セルのレイアウトを定義する Nib ファイルがありますが、この 2 つをリンクするのに問題があります。で使用しているコードは次のtableView:cellForRowAtIndexPathとおりです。

static NSString *FavCellIdentifier = @"FavCellIdentifier";

FavouriteCell *cell = [tableView dequeueReusableCellWithIdentifier:FavCellIdentifier];

if (cell == nil)
{
    cell = [[[FavouriteCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:FavCellIdentifier] autorelease];
}

cell.requestURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@?%@=%i", URL_GET_POST_STATUS,
                                           URL_PARAM_SERIAL,
                                           [[self.favourites objectAtIndex:indexPath.row] intValue]]];

return cell;

これにより、setRequestURLメソッドでの読み込みを処理する UITableViewCell サブクラスにリクエスト URL が与えられます。

FavouriteCell クラスではinitWithStyle:reuseIdentifier:メソッドをそのままにし、Nib では FavCellIdentifier を識別子として、FavouriteCell をクラスとして設定しました。FavouriteCell クラスに Nib をロードさせるにはどうすればよいでしょうか?

4

1 に答える 1

7

nib/xib ファイルを使用するには、FavouriteCell別の方法でインスタンス化する必要があります。

これを試して:

  1. あなたのタイプをxibのデフォルトではなくUITableViewCellサブクラスに変更したことを確認してください。これを行うには: FavouriteCellUITableViewCell
    • Interface Builder のオブジェクト ペインでセルをクリックします。
    • 次に、[Identity Inspector] タブに移動し、[カスタム クラス リスト] で [クラス] が選択されていることを確認しますFavouriteCell
  2. カスタムを表示する場所File's Ownerになるようにプロパティを変更します(手順 1 とほぼ同じプロセス)。UIViewControllerUITableViewCell
  3. IBOutlettype のプロパティを に追加FavouriteCellしますUIViewController。好きな名前を付けてください (私は と呼びますcell)。
  4. の xib に戻り、File's OwnerUITableViewCellのプロパティの IBOutlet を custom に接続します。cellUITableViewCell
  5. 次のコードを使用して、セルをプログラムでロードします。

- (FavouriteCell *)tableView:(UITableView *)tableView 
       cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellId = @"FavCellId";
    FavouriteCell *cell = [tableView dequeueReusableCellWithIdentifier:CellId];
    if (!cell) {
        // Loads the xib into [self cell]
        [[NSBundle mainBundle] loadNibNamed:@"FavouriteCellNibName" 
                                      owner:self 
                                    options:nil];
        // Assigns [self cell] to the local variable
        cell = [self cell];
        // Clears [self cell] for future use/reuse
        [self setCell:nil];
    }
    // At this point, you're sure to have a FavouriteCell object
    // Do your setup, such as...
    [cell setRequestURL:[NSURL URLWithString:
                  [NSString stringWithFormat:@"%@?%@=%i", 
                      URL_GET_POST_STATUS, 
                      URL_PARAM_SERIAL, 
                      [[self.favourites objectAtIndex:indexPath.row] intValue]]
     ];
    return cell;
}
于 2012-05-02T12:09:44.370 に答える