我有一个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
答案 0 :(得分:1)
您正试图在IBOutlet
上使用两个UITableViewController
来填充UILabel
中UIImageView
和UITableViewCell
的一部分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}}。