3

次の手順で、iPhoneアプリにカスタムテーブルビューセルを作成しました。

  1. ストーリーボードで、サンプルセルを作成し、UILabelとをドラッグしましたUIImageView
  2. のサブクラスを作成した新しいファイルを追加しましたUITableViewCell
  3. Interface Builderで、セルを選択し、そのクラスを手順2で作成したクラスとして割り当てました。
  4. カスタムテーブルビューセルのコードで、2つのIBOutletプロパティを作成し、それらを自分UILabelUIImageViewストーリーボードに接続しました。
  5. 私のカスタムテーブルビューセルには、独自の属性を設定する別のオブジェクトを受け取るメソッドも含まれています。

    -(void)populateWithItem:(PLEItem *)item
    {
        if (item.state == PLEPendingItem) {
            status.text = @"Pending upload..."; //status is a UILabel IBOutlet property
        }
        else if(item.state == PLEUploadingItem)
        {
            status.text = @"Uploading...";
        }
    
        imageView.image = [UIImage imageWithContentsOfFile:item.path]; //imageView is the UIImageView IBOutlet property
    }
    

このメソッドは私から呼び出されますtableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath as follows:

    PLEPendingItemCell* cell = (PLEPendingItemCell*)[tableView dequeueReusableCellWithIdentifier:item_id];
    if (cell == nil) {
        cell = [[PLEPendingItemCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:pending_id];
    }

    [cell populateWithItem:((PLEItem*)[itemList objectAtIndex:indexPath.row])];

    return cell;

問題は、セルが常に空で表示されることです。UILabelPopulateWithItemにブレークポイントを設定し、そのメソッド内でステータスと画像の両方UIImageViewがnilであることに気付きました。

IBはこれらを初期化すべきではありませんか?そうでない場合は、どこでそれを行う必要がありますか?

4

1 に答える 1

4

ストーリーボードにセルを設定する場合は、ストーリーボードがセルtableView:dequeueReusableCellWithIdentifier:forIndexPath:を作成してビューを接続する場所であるため、常にを使用してセルを作成する必要があります。

サンプルコードのように、コンストラクターを使用してセルを直接作成しても、ストーリーボードやペン先などからサブビューは読み込まれません。作成したクラスは、ストーリーボードのプロトタイプセルについて何も知りません。

于 2013-01-15T00:50:02.390 に答える