0

UITableView を使用して写真ストリームを作成しようとしています(Instagramのように)。動作するはずのコードがありますが、画像がまだ表示されていません。テーブルの一部ではない UIImageView を作成すると、画像は表示されますが、テーブルに追加しようとすると表示されません。画像なしでテーブルが表示されています。ここにコードがあります -

テーブルが作成されているView Controller

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    //    NSInteger sections = self.objects.count;
    //    if (self.paginationEnabled && sections != 0)
    //        sections++;
    //    return sections;
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"PhotoCell";
    PhotoCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    cell.thumbImage = [UIImage imageNamed:self.thumbImage];

    if (cell==nil) {
        cell = [[PhotoCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

    }
    // Configure the cell...

    return cell;
}

セルViewController -

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
        UIImageView *imageView = [[UIImageView alloc] initWithImage:self.thumbImage];

        imageView.frame = CGRectMake( 0.0f, 0.0f, 320.0f, 320.0f);
        imageView.backgroundColor = [UIColor blackColor];
        imageView.contentMode = UIViewContentModeScaleAspectFit;

        self.photoButton = [UIButton buttonWithType:UIButtonTypeCustom];
        self.photoButton.frame = CGRectMake( 0.0f, 0.0f, 320.0f, 320.0f);
        self.photoButton.backgroundColor = [UIColor clearColor];
        [self.contentView addSubview:self.photoButton];

        NSLog(@"Working");
        [self.contentView bringSubviewToFront:self.imageView];
    }
    return self; }

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state }

#pragma mark - UIView

- (void)layoutSubviews {
    [super layoutSubviews];
    self.imageView.frame = CGRectMake( 20.0f, 0.0f, 280.0f, 280.0f);
    self.photoButton.frame = CGRectMake( 20.0f, 0.0f, 280.0f, 280.0f); }

@end

これを使用して、あるビューでキャプチャした画像を別のビューに送信しています-

PhotoCell *photoCell = [[PhotoCell alloc] init];
    photoCell.thumbImage = self.thumbImage;
4

2 に答える 2

0

上記で説明したこと以外に、テーブル ビュー セルまたは に対して非同期の画像読み込みを使用する必要がありますPhotoCell。これは で簡単に実行できますUIImageView+AFNetworking

Instagram のフォト ストリームを構築しようとしているようですね。このサンプル コードであるSTXDynamicTableViewを見てください。必要なのは、非同期イメージの読み込みを接続するだけです。

于 2014-04-28T09:21:53.697 に答える
0

コードの問題は、画像を潜在的に nil であるオブジェクトに設定しようとしていることです。

セルがnilでない場合は呼び出されないメソッドにdequeueReusableCellWithIdentifier:画像ビューを追加しているため、有効なセルインスタンスを返してもコードは機能しません。initWithStyle:reuseIdentifier:

次のようなことをすることをお勧めします

ViewController

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:   (NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"PhotoCell";
PhotoCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell==nil) {
    cell = [[PhotoCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

}

[cell setImage:[UIImage imageNamed:self.thumbImage];

return cell;
}

細胞サブクラス

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
    // Maintain reference to the image view you create.
    self.imageView = [[UIImageView alloc] init];

    self.imageView.frame = CGRectMake( 0.0f, 0.0f, 320.0f, 320.0f);
    self.imageView.backgroundColor = [UIColor blackColor];
    self.imageView.contentMode = UIViewContentModeScaleAspectFit;

    self.photoButton = [UIButton buttonWithType:UIButtonTypeCustom];
    self.photoButton.frame = CGRectMake( 0.0f, 0.0f, 320.0f, 320.0f);
    self.photoButton.backgroundColor = [UIColor clearColor];
    [self.contentView addSubview:self.photoButton];

    NSLog(@"Working");
    [self.contentView bringSubviewToFront:self.imageView];
}
return self; }

-(void)setImage:(UIImage *)image
{
  [self.imageView setImage:image];
}

同じメモで、プロトタイプ セルを使用している場合は、xib/ストーリーボードにプロトタイプ セルを作成することをお勧めします。これは、このケースを処理するためのはるかに簡単でエレガントな方法です。

于 2013-10-16T02:04:57.440 に答える