2012-06-06 7 views
6

Ich habe ein Problem mit meinem UITableView in PopoverController. Wenn ich Zelle berühre, wird die didSelectRowAtIndexPath-Funktion aufgerufen, und die Zelle accessoryType wird geändert. Beispiel vereinfacht:UITableViewCell mit Häkchen nicht sichtbar

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [self.listItems objectAtIndex:indexPath.row]; 
    cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    [self.tableView reloadData]; 
    [self.popoverController dismissPopoverAnimated:YES]; 
} 

Es funktioniert, ist die Zelle überprüft, aber es ist nicht sichtbar auf meinem Tableview: Ich kann nicht das blaue Häkchen sehen. Im Berührungsstatus der Zelle ist das Häkchen jedoch weiß (und der Zellenhintergrund ist grau). Im Standardzustand jedoch nicht sichtbar.

Haben Sie eine Idee, warum meine Häkchen im Standardzustand nicht sichtbar sind?

Danke,

Edit: In Screenshot, für eine Zelle mit accessoryType = UITableViewCellAccessoryCheckmark

enter image description here

+0

für den Standardzustand müssen Sie setzen cell.accessoryType = UITableViewCellAccessoryCheckmark; drinnen - (UITableViewCell *) tableView: (UITableView *) tabellensicht cellForRowAtIndexPath: (NSIndexPath *) indexPath-Methode. –

+0

Ja, ich lege es und es funktioniert. Mein Problem ist auf dem Display ... – alexmngn

+0

Jetzt ist standardmäßig funktioniert, und auf dem Display, was fehlt –

Antwort

0

Sie sind die UITableView so in der Theorie Nachladen die Zellen neu erstellt werden und diesmal ohne das Häkchen. Folgendes tun:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [self.listItems objectAtIndex:indexPath.row]; 
    cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    [self.popoverController dismissPopoverAnimated:YES]; 
} 
+0

Aber ich mussData erneut laden ... – alexmngn

+0

Fair genug, dann müssen Sie diese bestimmte Zelle irgendwie markieren. Wenn das 'UITableView' erneut geladen wird, ist das Häkchen immer noch vorhanden. Sie können einen Verweis auf den 'indexPath' behalten und im 'cellForRowAtIndex' kontrollieren Sie. – Peres

+0

Es ist nicht das Problem, in meinem 'cellForRowAtIndexPath' verifiziere ich und füge das Häkchen bei Bedarf hinzu. Mein Problem ist auf dem Display, nicht in der Funktion. – alexmngn

2

Ich hatte ein ähnliches Problem, wenn sie nach der Reihe mit einem Häkchen gesetzt, wie das Zubehör Nachladen, das Häkchen nicht sichtbar wäre (aber wäre sichtbar in weiß, wenn die Zeile ausgewählt wurde) . Beim Testen des Problems entdeckte ich, dass das Häkchen immer in der Zelle vorhanden ist, es ist nur Weiß-in-Weiß.

Mein Verständnis des Problems ist, dass, wenn ich für die Zelle nachladen aufgefordert (so dass ich es mit einem Häkchen zeigen kann), wird die vorhandene Zelle in die Wiederverwendungswarteschlange gelegt, ist aber zu diesem Zeitpunkt in einem ausgewählten state (weil der Benutzer es gerade ausgewählt hat). Es befindet sich immer noch in einem ausgewählten Status, wenn die Zelle aus der Wiederverwendungswarteschlange zurückkehrt und Sie sie in tableView: cellForRowAtIndexPath neu konfigurieren, und da sie ausgewählt ist, wird das Zubehör in weiß statt in einer sichtbaren Farbe festgelegt.

Um dies zu beheben, habe ich eine Zeile in tableView: cellForRowAtIndexPath hinzugefügt, um zu erzwingen, dass die Zelle nicht ausgewählt wird. Das Zubehör ist jetzt immer sichtbar, wenn die neue Zelle angezeigt wird.

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Get a reusable cell - this only works with Storyboard prototype cells 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell"]; 

    // THE MAGIC BIT 
    // Force the cell to not be in a selected state.  
    cell.selected = NO; 
    // END MAGIC BIT 

    if (indexPathIsPathOfSelectedRow) { 
     // This is the selected cell, so show the checkmark accessory. 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    } else { 
     // In case we're reusing a cell that previously showed a checkmark, clear it. 
     cell.accessoryType = UITableViewCellAccessoryNone; 
    } 

    return cell; 
} 
3

Ich habe die Antwort versucht Jacky Boy - hat nicht geholfen. Aber etwas gab es in der Abwahl ...

Also habe ich versucht, die Zelle in den DidSelectRowAtIndexPath abzuwählen: bevor das Häkchen Zubehör ergänzt:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
    UITableViewCell* selectedCell = [tableView cellForRowAtIndexPath:indexPath]; 

    if (row != _selectedRow) { 

     if (selectedCell.accessoryType == UITableViewCellAccessoryNone) { 

      selectedCell.accessoryType = UITableViewCellAccessoryCheckmark; 
      _selectedRow = row; 

     } else if (selectedCell.accessoryType == UITableViewCellAccessoryCheckmark) { 

      selectedCell.accessoryType = UITableViewCellAccessoryNone; 
     } 
     [tableView reloadData]; 
    } 

}

Und für mich gearbeitet endlich - das schöne dunkle Häkchen ist jetzt deutlich sichtbar auf der Zelle!

Natürlich gibt es einen Teil in cellForRowAtIndexPath: ähnlich wie in Arexx Antwort beschrieben.

0

Laufen unter iOS 6.1, das Verhalten, das ich sehe, ist eine Zelle mit einem weißen Häkchen auf einem fast weißen Hintergrund. Dies scheint zu geschehen, weil der Code, der das Häkchenzubehör zeichnet, glaubt, dass sich die Zelle in einem hervorgehobenen Zustand befindet. Anstatt also das Häkchen in der normalen blauen Farbe zu zeichnen, wird es weiß gezeichnet.

Das Einstellen des ausgewählten Status der Zelle funktionierte nicht für mich, sondern das Setzen des markierten Zustands unmittelbar vor dem Einstellen des Zubehörtyps. Mit den folgenden Punkten bekomme ich immer ein dunkelblaues Häkchen.

cell.highlighted = NO; 
if (checked) 
    self.accessoryType = UITableViewCellAccessoryCheckmark; 
else 
    self.accessoryType = UITableViewCellAccessoryNone; 
+0

'Not work''''''''''''''''s – Gank

0

Wenn Sie Daten neu geladen werden soll, dann sollten Sie Id in irgendeiner Variable für einzelne Auswahl wie rowIndex Store ausgewählt und dann in

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    //check index 
    if (rowIndex==indexPath.row) 
     {cell.accessoryType = UITableViewCellAccessoryCheckmark; 
     } 
     else{ 
      cell.accessoryType = UITableViewCellAccessoryNone; 
     } 
} 

Dank.

7

Das passierte mir, als ich die globale Tönungsfarbe auf weiß änderte. Sobald ich realisierte, ging ich in die UITableView und ändere die Farbtonfarbe lokal nur für diese Tabelle. Fest.

+0

Dies half mir mein Problem zu lösen. Wenn jemand anderes dieses Problem hat und die globale Farbtonfarbe beibehalten möchte, ändern Sie einfach den Farbton in viewDidLoad() in Ihrer TableView-Klasse: self.view.tintColor = UIColor.blackColor() – Jordan

0
-(UIImageView *)checkmarkImg{ 
    UIImage *image = [[UIImage imageNamed:@"ic_check_black_24dp.png"] changeColor:CLR_BUY]; 
    UIImageView *checkmark = [[UIImageView alloc] initWithImage:image]; 
    return checkmark; 
} 

     cell.accessoryView = [self checkmarkImg]; 
2

Meine war der dümmste Grund. Ich hatte eine Tabelle im Storyboard erstellt, mit einem View-Controller der Größe 5,5 Zoll und vergessen, die Layout-Einschränkungen gelten.

Dann startete ich in einem 4-Zoll-Telefon, alles sah gut aus, außer die Zubehöransicht war nicht sichtbar, weil TableViews Breite größer als die des Bildschirms Telefon war. Ich habe 3 Stunden gebraucht, um meinen Fehler zu finden.

Verwandte Themen