Ich habe eine benutzerdefinierte UITableViewCell
Klasse mit einem UIButton
, einem UIImage
und zwei UILabels
erstellt. Die Schaltfläche und das Bild werden übereinander gelegt und jeweils nur eine angezeigt. Das erwartete Verhalten ist das Berühren der Schaltfläche, die Schaltfläche wird ausgeblendet und das Bild wird angezeigt. Die UITableViewCells
sind so eingestellt, dass sie wiederverwendet werden. Hier ist mein Code:Benutzerdefinierte UITableViewCell wird nicht am Set needsDisplay
Constructor:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
unheartButton = [[UIButton buttonWithType:UIButtonTypeCustom] retain];
unheartButton.backgroundColor = [UIColor clearColor];
unheartButton.frame = CGRectMake(10, 13, 20, 18);
[unheartButton addTarget:self action:@selector(onButtonClick:) forControlEvents:UIControlEventTouchUpInside];
[unheartButton setBackgroundImage:[UIImage imageNamed:@"redheart.png"] forState:UIControlStateNormal];
imageView = [[UIImageView alloc] init];
imageView.frame = CGRectMake(12, 13, 16, 16);
NSMutableArray *array = [[NSMutableArray alloc] init];
for (int ndx = 1; ndx < 13; ndx++) {
[array addObject:[UIImage imageNamed:[NSString stringWithFormat:@"icon-loading-%d (dragged).tiff", ndx]]];
}
imageView.animationImages = array;
imageView.animationDuration = 1;
[array release];
[self.contentView addSubview:imageView];
[self.contentView addSubview:unheartButton];
return self;
}
}
- (void) setModel:(MyModel *)myModel {
model = myModel;
if (model.hideImage) {
imageView.hidden = YES;
unheartButton.hidden = NO;
else {
imageView.hidden = NO;
unheartButton.hidden = YES;
}
}
Button-Klick:
- (IBAction) onButtonClick: (id) sender {
model.hideImage = NO;
unheartButton.hidden = YES;
imageView.hidden = NO;
[imageView startAnimating];
[self setNeedsDisplay];
[self.contentView setNeedsDisplay];
[self.unheartButton setNeedsDisplay];
[self.imageView setNeedsDisplay];
}
Ich setNeedsDisplay
auf alles fordern, aber nichts scheint zu passieren. Wenn ich vom Bildschirm blättere und wieder hochfahre, ist die Schaltfläche ausgeblendet und jetzt wird das Ladesymbol angezeigt, dies geschieht jedoch nur nach einem Bildlauf. Ich bin mir nicht sicher, was ich tun muss, damit die Zelle neu streichen kann.
In meiner benutzerdefinierten UITableViewCell ich hinzufügen NSIndexPath und weisen Sie auf die Zelle, dann die Zelle I nennen dies neu zu ziehen: [self.tableView reloadRowsAtIndexPaths: [NSArray arrayWithObject: currentCell.indexPath] withRowAnimation: UITableViewRowAnimationNone]; –