我有这个非常奇怪的问题。
基本上我有一个 UITableViewCell 子类,我编写了一些插座并将其链接到一个 Nib。
Cell.h 的子类
@property (weak, nonatomic) IBOutlet UIImageView *myImageView;
Cell.m 的子类
@synthesize myImageView = _myImageView; // do i need this?
- (void) setUpCell... image:(UIImage*)image
{
if(image)
self.myImageView.image = image;
else
self.myImageView.image = nil;
}
在管理单元格的表格视图的视图控制器中,
我已使用以下代码向 Nib 注册:
[self.tableView registerNib:[UINib nibWithNibName:pathToNibForBaseMenuCell bundle:nil] forCellReuseIdentifier:identifierForBaseMenuCell];
在 cellForRowAtIndexPath 中,我将单元格出列并设置图像...
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:identifierForBaseMenuCell];
switch (indexPath.section) {
case 2:
[cell setUpCell...image:self.cogWheelImageForSettingsIcon];
break;
default:
break;
}
return cell;
}
奇怪的是,假设我在第 2 部分中有 10 个单元格(如上),我以相同的方式设置它们,有些单元格显示齿轮图标,有些则没有!将这些单元格滚动进出视图似乎会改变哪些单元格显示图标而哪些不显示。
这意味着注册单元格,包括设置重用标识符,在 nib 文件中设置子类,所有这些都很好(常见的陷阱)。
在我看来,这种行为模式与内存有关 - 好像某处正在释放某些东西......
这是一张图片来说明我的意思:
请帮忙!
谢谢
维生素B
编辑:
好吧,明确一点,我还没有在这张表上使用任何数据,但尽管如此,我没有理由不应该出现这些齿轮!
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 3;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
switch (section) {
case 0:
return 1;
break;
case 1:
return 10;
break;
case 2:
return 10;
break;
default:
return 0;
break;
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:identifierForBaseMenuCell];
switch (indexPath.section) {
case 0:
[cell setUpCell... text:@"Username" image:nil];
break;
case 1:
[cell setUpCell... text:@"Magazine" image:nil];
break;
case 2:
{
NSString* str = [NSString stringWithFormat:@"Settings: %d",indexPath.row];
[cell setUpCell... text:str image:self.cogWheelImageForSettingsIcon];
break;
}
default:
break;
}
return cell;
}
它的输出是......
我的观点是,如果我为第二部分“设置”中的所有单元格设置相同的图像,为什么只有其中一些单元格显示图像?
自定义单元类:
@interface CustomCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UIImageView *backgroundImageView;
@property (weak, nonatomic) IBOutlet UILabel *mainLabel;
@property (weak, nonatomic) IBOutlet UILabel *arrowView;
@property (weak, nonatomic) IBOutlet UIImageView *myImageView;
- (void) setUpCelltext:(NSString*)text image:(UIImage*)image;
@implementation CustomCell
- (void) setUpCelltext:(NSString*)text image:(UIImage*)image
{
self.backgroundImageView.image = [UIImage imageNamed:pathForBackgroundImage];
self.myImageView.layer.cornerRadius = kCornerRadiusOfImageView;
self.myImageView.layer.masksToBounds = YES;
if(image)
self.myImageView.image = image;
else
self.myImageView.image = nil;
NSDictionary *attrsDictionary = [NSDictionary dictionaryWithObject:self.fontForText forKey:NSFontAttributeName];
NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:text attributes:attrsDictionary];
self.mainLabel.attributedText = attrString;
}
@end
单元格有自定义字体、箭头视图、背景视图——它们都可以正常工作!它们根据部分而变化。它只是不起作用的图像。您可以看到 cellForRowAtIndexPath 调用的此函数将设置图像(如果提供),或者将 imageview 设置为 nil(如果不提供)。