UIImageView背景颜色但不显示图像

时间:2012-06-29 16:10:01

标签: ios xcode uiimageview xib nib

我有一个UITableViewCell个nib文件,其中有一个UIImageView和一个UILabel。我有两个出口给我的控制器以及电池本身的插座。我以编程方式设置标签和图像,但图像没有显示。

所以我去测试它,即使我在nib文件中设置图像本身,它也不会显示出来。如果我设置背景颜色,它会显示正常。有任何想法吗?我被卡住了。

在我看来,它似乎与代码无关,因为它甚至不能通过nib文件工作。但无论如何它都是以某种方式帮助它。

MyViewController.h

@interface MyViewController : UITableViewController

@property (strong, nonatomic) MyModel *myModel;
@property (strong, nonatomic) NSArray *tableViewCells;

@property (strong, nonatomic) IBOutlet UITableViewCell *tableViewCell;
@property (weak, nonatomic) IBOutlet UILabel *myLabel;
@property (weak, nonatomic) IBOutlet UIImageView *myImage;

@end

MyViewController.m

@interface MyViewController ()

- (void)bindMyModel:(MyModel*)model toView:(UITableViewCell*)view;

- (UITableViewCell*)copyUITableViewCell:(UITableViewCell*)cell;

@end

@implementation MenuViewController

@synthesize myModel = _myModel;
@synthesize tableViewCells = _tableViewCells;

@synthesize tableViewCell = _tableViewCell;
@synthesize myLabel = _myLabel;
@synthesize myImage = _myImage;

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSMutableArray *cells = [[NSMutableArray alloc] init];
    [MyModel loadAndOnSuccess:^(id data, id context) {
        self.myModel = data;
        for (MyModel *item in self.myModel.items) {
            [[NSBundle mainBundle] loadNibNamed:@"TableCellNib" owner:self options:nil];
            [self bindMyModel:item toView:self.tableViewCell];
            [cells addObject:[self copyUITableViewCell:self.tableViewCell]];
            self.tableViewCell = nil;
        }
        self.tableViewCells = [[NSArray alloc] initWithArray:cells];
    } onFail:^(NSString *error, id context) {
        NSLog(@"FAIL with error: %@", error);
    }];
}

- (void)viewDidUnload
{
    [self setTableViewCell:nil];
    [self setMyLabel:nil];
    [self setMyImage:nil];
    [super viewDidUnload];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}

- (void) bindMyModel:(MyModel*)model toView:(UITableViewCell*)view
{
    if (view) {
        self.myLabel.text = model.myLabelText;
        self.myImage.image = model.myImageResource;
        self.myLabel = nil;
        self.myImage = nil;
    }
}

- (UITableViewCell*)copyUITableViewCell:(UITableViewCell*)cell
{
    NSData *archivedData = [NSKeyedArchiver archivedDataWithRootObject: cell];
    return [NSKeyedUnarchiver unarchiveObjectWithData: archivedData];
}

#pragma mark - Table view data source

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return [self.tableViewCells objectAtIndex:indexPath.row];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.myModel.items.count;
}

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Irrelevant code here
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return ((UITableViewCell*)[self.tableViewCells objectAtIndex:indexPath.row]).frame.size.height;
}

@end

1 个答案:

答案 0 :(得分:1)

您正试图在IBOutlet上使用两个UITableViewController来填充UILabelUIImageViewUITableViewCell的一部分UITableViewCell 。您需要创建IBOutlet的自定义子类,并将@interface CustomCell : UITableViewCell @property (weak, nonatomic) IBOutlet UILabel *myLabel; @property (weak, nonatomic) IBOutlet UIImageView *myImage; @end 添加到该子类。

bindMyModel:toView:

然后在- (void) bindMyModel:(MyModel*)model toView:(CustomCell*)view { if (view) { view.myLabel.text = model.myLabelText; view.myImage.image = model.myImageResource; } }

IBOutlet

现在,您的每个单元格都有独立dequeueReusableCellWithIdentifier个。您还需要更改一些绑定。这是一个修复,但老实说,我会重写很多代码,只需在cellForRowAtIndexPath调用中使用CustomCell,并保留一个您将重用的myLabel.text池,并且只是在myImage.image来电中设置cellForRowAtIndexPath和{{1}}。