Ich habe Probleme mit Tabellenansicht Zellen behalten ihren "ausgewählten" Zustand beim Scrollen der Tabelle. Hier ist der relevante Code:UITableView ausgewählte Zelle bleibt beim Scrollen nicht ausgewählt
@property (nonatomic, strong) NSIndexPath *selectedIndexPath;
-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
self.selectedIndexPath = indexPath;
//do other stuff
}
-(UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
MyCustomCell_iPhone* cell = [tableView dequeueReusableCellWithIdentifier:@"MyCustomCell_iPhone"];
if (cell == nil)
cell = [[[NSBundle mainBundle] loadNibNamed:@"MyCustomCell_iPhone" owner:self options:nil] objectAtIndex:0];
if ([indexPath compare: self.selectedIndexPath] == NSOrderedSame) {
[cell setSelected:YES animated:NO];
}
return cell;
}
Und für die Zelle:
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
if (selected) {
self.selectedBg.hidden = NO;
}else{
self.selectedBg.hidden = YES;
}
}
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
{
[super setHighlighted:highlighted animated:animated];
if (highlighted) {
self.selectedBg.hidden = NO;
}else{
self.selectedBg.hidden = YES;
}
}
Wie kann ich die ausgewählte Zelle markiert bleiben erhalten? Wenn ich es vom Bildschirm scrollt, wenn es auf dem Bildschirm zurück scrollt, erscheint es in seinem nicht ausgewählten Zustand (mit seinem ausgewählten Bg ausgeblendet).
EDIT: Entfernen Sie die SetHighlighted-Methode aus der Zelle behebt das Problem. Das bedeutet jedoch, dass ich beim Drücken der Tabellenzelle keinen markierten Zustand erhalte. Ich würde gerne die Lösung dafür wissen.
Großartig! Diese Lösung hat für mich gut funktioniert. Aber ich habe ein Problem gefunden, wenn die ausgewählte Zeile erneut ausgewählt wird. Dann wird es abgewählt. Ich habe dieses UITableView Delegatmethode hinzugefügt, um das Problem zu lösen: - (NSIndexPath *) tableview: (UITableView *) tableview willDeselectRowAtIndexPath: (NSIndexPath *) indexPath { UITableViewCell * cell = [Tableview cellForRowAtIndexPath: indexPath]; if ([cell isSelected]) { Rückgabe nil; } Rückgabe IndexPfad; } – mlabraca