使用UITableView创建照片Feed

时间:2013-11-14 01:45:01

标签: ios objective-c uitableview

我正在尝试使用UITableView创建照片Feed。我有代码来创建表格,并在拍摄照片时将其显示在Feed中但图像未显示。该图像是被捕获的,如果我使用UIImageView来显示它,它可以工作,但是当我尝试将它添加到表中时,它不会。我还注意到,当我点击空表的一行时,我的didSelectRow操作不起作用,所以我不确定问题是表格还是图像的显示方式。

以下是我用来创建表格的代码:

tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
tableView.delegate = self;
tableView.dataSource = self;
tableView.separatorColor = [UIColor clearColor];
[self.view addSubview:tableView];
[_tableView release];
[self.tableView release];

以下是该表的其余代码:

#pragma mark - UITableViewDataSource
// number of section(s), now I assume there is only 1 section
- (NSInteger)numberOfSectionsInTableView:(UITableView *)theTableView
{
    return 1;
}

// number of row in the section, I assume there is only 1 row
- (NSInteger)tableView:(UITableView *)theTableView numberOfRowsInSection:(NSInteger)section
{
    return 1;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    //    if (indexPath.section >= self.objects.count) {
    //        // Load More Section
    //        return 320.0f;
    //    }
    //
    return 320.0f;
}

// the cell will be returned to the tableView
- (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"HistoryCell";
    // Similar to UITableViewCell, but
    PhotoCell *cell = (PhotoCell *)[theTableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell == nil) {
        cell = [[PhotoCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }
    // Just want to test, so I hardcode the data
    cell.descriptionLabel.text = @"Testing";
    cell.thumbImage = self.thumbImage;
    //cell.backgroundView = self.thumbImage;

    return cell;
}

#pragma mark - UITableViewDelegate
// when user tap the row, what action you want to perform
- (void)tableView:(UITableView *)theTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    DetailViewController *detailsViewController = [[DetailViewController alloc] init];
    [self.navigationController pushViewController:detailsViewController animated:YES];
}

这是PhotoCell.M:

 #import "PhotoCell.h"
#import "FeedViewController.h"
#import "DetailViewController.h"

@implementation PhotoCell

@synthesize thumbImage = _thumbImage;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // configure control(s)

        UIImageView *testView = [[UIImageView alloc] initWithImage:self.thumbImage];
        testView.frame = CGRectMake(0, 0, 320, 320);
        [self addSubview:testView];
        [self bringSubviewToFront:testView];

    }
    return self;
}

@end

3 个答案:

答案 0 :(得分:1)

这只是一个快速(我没有测试过这是Xcode)

试试这个:

#import "PhotoCell.h"
#import "FeedViewController.h"
#import "DetailViewController.h"

@interface PhotoCell ()
@property(nonatomic, strong) UIImageView testView;
@end

@implementation PhotoCell

@synthesize thumbImage = _thumbImage;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // configure control(s)

        self.testView = [[UIImageView alloc] initWithFrame:CGRectZero]
        [self.contentView addSubview:self.testView];

    }
    return self;
}

- (void) layoutSubviews {
    [super layoutSubviews];
    self.testView.frame = CGRectMake(0, 0, 320, 320);
}

- (void) setThumbImage:(UIImage *)image{
    _thumbImage = image;
    self.testView.image = _thumbImage
}
@end

好的:

我已从init方法中删除了帧信息,因为在单元格不知道其帧时将其移动到layoutSubviews对于要添加更复杂布局的时间更安全(即使你在这个单元格中拥有的只是一张图像)

我覆盖了self.thumbImage的默认设置器,这样我们也可以告诉imageView(testView)图像是什么,而不是存储UIImage对象,而应该显示它。

将单元格的所有子视图添加到self.contentView而不是self也是一种很好的做法,因为苹果会使用其单元格状态执行大量自动魔法操作并向自己添加子视图可能会导致意外行为例如,在编辑模式下。

希望它有所帮助。

答案 1 :(得分:0)

我认为这是因为在PhotoCell.M中的'initWithStyle'时,尚未设置thumbImage属性。

如果是我,我会覆盖PhotoCell的setThumbImage函数,将图像设置为imageview。

答案 2 :(得分:0)

当testView为alloc时,self.thumbImage在那时为零。

你可以简单地设置cell.imageView.image来试试!