0

我有一个UITableViewCellnib 文件,其中有一个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

我的视图控制器.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
4

1 回答 1

1

您正在尝试IBOutlet在您的 s 上使用两个 sUITableViewController来填充大量UILabels 和UIImageViews 的一部分UITableViewCell。您需要创建一个自定义子类UITableViewCell并将IBOutlets 添加到该子类。

@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,您的每个 Cell 都有独立的 s。您还需要更改一些绑定。这是一个修复,但老实说,我会重写很多代码并仅dequeueReusableCellWithIdentifier在您的cellForRowAtIndexPath调用中使用,并保留一个您将重用的 s 池,并在调用中CustomCell设置myLabel.textand 。myImage.imagecellForRowAtIndexPath

于 2012-06-29T20:01:27.560 回答