0

次のコードを使用してカスタム UITableViewCell を表示しています。ただし、問題は、それが表示されているだけbackImageで、他の種類のラベルや画像が表示されていないことです。

これがコードとssです。

なにが問題ですか???

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIImageView *maleIcon;
    UIImageView *femaleIcon;
    UIImageView *backImage;

    UILabel *name;
    UILabel *address;
    UILabel *maleCount;
    UILabel *femaleCount;

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];

    VenueClass *venue = [self.venueArray objectAtIndex:[indexPath row]];

    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MyIdentifier"];
        backImage =  [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)];

        maleIcon   =  [[UIImageView alloc] initWithFrame:CGRectMake(234,143,25,25)];
        femaleIcon =  [[UIImageView alloc] initWithFrame:CGRectMake(234,173,25,25)];

        maleIcon.image    =   [UIImage imageNamed:@"rectangle.png"];
        femaleIcon.image  =   [UIImage imageNamed:@"rectangle.png"];

        name        = [[UILabel alloc] initWithFrame:CGRectMake(10,148,140,22)];
        address     = [[UILabel alloc] initWithFrame:CGRectMake(10,178,140,22)];
        maleCount   = [[UILabel alloc] initWithFrame:CGRectMake(266,145,48,22)];
        femaleCount = [[UILabel alloc] initWithFrame:CGRectMake(266,175,48,22)];

        name.font        = [UIFont boldSystemFontOfSize:16];
        address.font     = [UIFont systemFontOfSize:14];
        maleCount.font   = [UIFont boldSystemFontOfSize:14];
        femaleCount.font = [UIFont boldSystemFontOfSize:14];

        name.backgroundColor        = [UIColor clearColor];
        address.backgroundColor     = [UIColor clearColor];
        maleCount.backgroundColor   = [UIColor clearColor];
        femaleCount.backgroundColor = [UIColor clearColor];

        name.textColor        = [UIColor whiteColor];
        address.textColor     = [UIColor whiteColor];
        maleCount.textColor   = [UIColor whiteColor];
        femaleCount.textColor = [UIColor whiteColor];

        [cell.contentView addSubview:backImage];
        [cell.contentView addSubview:name];
        [cell.contentView addSubview:address];
        [cell.contentView addSubview:maleCount];
        [cell.contentView addSubview:femaleCount];
        [cell.contentView addSubview:femaleIcon];
        [cell.contentView addSubview:maleIcon];

    }

    CLLocation *location = [[CLLocation alloc] initWithLatitude:[venue.latitude doubleValue] longitude:[venue.longitude doubleValue]];

    AppDelegate *appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
    int distance = [location distanceFromLocation:appDelegate.myLocationCtrl.locationManager.location];
    distance = distance / 1000;

    [femaleCount setText:venue.femaleCount];
    [maleCount   setText:venue.maleCount];
    [name        setText:venue.name];
    [address     setText:[NSString stringWithFormat:@"%@/%d Km", venue.address, distance]];

    cell.accessoryType = UITableViewCellAccessoryNone;
    cell.backgroundColor = [UIColor clearColor];


    NSString *path = [[NSString stringWithFormat:@"%@%@" ,IMAGE_URL, venue.imagePath ] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    [backImage setImageWithURL:[NSURL URLWithString:path] placeholderImage:[UIImage imageNamed:@""]
                  completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType)
     {         
     }];

    return cell;
}

ここに画像の説明を入力

4

2 に答える 2

1

はい、背面の画像は幅と高さが高すぎます。320x100 に設定します。60x100 を試してください。

申し訳ありませんが編集: Y 座標が 100 を超えているため、他のアイテムが画面/セルから外れています。Tr の 2 番目の引数を initWithFrame:CGRectMake(X、Y はセルの高さ、幅、高さよりも小さくする必要があります) に減らします

于 2013-11-02T17:03:11.343 に答える
0

MyIdentifierコードで以前に識別子のクラスを登録しましたか?

その場合、メソッドは常にセルを返すため、 cellnil になることはありません。dequeueReusableCellWithIdentifier:ドキュメントから:

指定された識別子のクラスを登録し、新しいセルを作成する必要がある場合、このメソッドは initWithStyle:reuseIdentifier: メソッドを呼び出してセルを初期化します。nib ベースのセルの場合、このメソッドは、提供された nib ファイルからセル オブジェクトをロードします。既存のセルを再利用できる場合、このメソッドは代わりにセルの prepareForReuse メソッドを呼び出します。

つまり、if(cell == nil){}ステートメント内で実行しているセットアップがコードで実行されることはありません。

その再利用識別子のクラスまたは Nib を登録しなかった場合、アプリは例外でクラッシュするはずなので、アプリに表示されているのは、登録したデフォルトの nib またはクラスがどのように見えるかであると思われます。

一般的なアプローチは、カスタム UITableViewCell クラスまたは nib 内でこれらすべての子ラベルと imageView を構成し、このtableView:cellForRowAtIndexPath:メソッド内でそれらのプロパティに関連する値を割り当てることです。

于 2013-11-02T17:02:46.257 に答える