2016-05-14 4 views
0

Ich habe einen seltsamen Fehler. Ich verwende UITableView, die neu geladen werden muss, wenn eine Zeile ausgewählt wird. Dies funktioniert im iPhone-Simulator. Während auf dem iPad ausgeführt wird, wird didSelectRowAtIndexPath aufgerufen, aber die Benutzeroberfläche wird nicht aktualisiert. Ich habe versucht, die Methode reloadData auf Haupt-Thread aufrufen. Es ist immer noch dasselbe.TableView reloadData aktualisiert UI in iPad nicht, aber funktioniert in iPhone

Ich habe verschiedene Lösungen im Stackoverflow ausprobiert. Nichts schien mein Problem zu lösen.

UPDATE

Wenn ich eine Zelle auswählen, werden neue Zelle hinzugefügt werden. Also muss ich meine Tabellenansicht neu laden, um die dynamische Änderung anzuzeigen. Posted meinen Code unten

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath 
{ 
NSUInteger count=indexPath.row+1; 

NSMutableArray *insertIndexPaths = [NSMutableArray array]; 

[insertIndexPaths addObject:[NSIndexPath indexPathForRow:count inSection:indexPath.section]]; 

switch (indexPath.row) { 
     case 0: 
    { 
    if ([ItemsInSection[indexPath.section] count]==1){ 
       [ItemsInSection[indexPath.section] addObject:obj2]; 

       [TabView beginUpdates]; 
       [TabView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationLeft]; 

       [TabView endUpdates];   
      } 
      else { 

       [ItemsInSection[indexPath.section] removeAllObjects]; 
       [ItemsInSection[indexPath.section] addObject:obj1]; 

       [self.TabView reloadData]; 

      } 
     } 
      break; 

     case 1: 

    {if ([ItemsInSection[indexPath.section] count]==2){ 
       [ItemsInSection[indexPath.section] addObject:obj3]; 

       [self.TabView beginUpdates]; 
       [TabView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationLeft]; 
       [self.TabView endUpdates]; 

      } 
      else 
      { 
       [ItemsInSection[indexPath.section] removeAllObjects]; 
       [ItemsInSection[indexPath.section] addObject:obj1]; 
       [ItemsInSection[indexPath.section] addObject:obj2]; 

       [self.TabView reloadData]; 
       } 
     } 
      break; 

     case 2: { 

      if ([ItemsInSection[indexPath.section] count]==3) { 
       [ItemsInSection[indexPath.section] addObject:obj4]; 
       [self.TabView beginUpdates]; 
       [TabView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationLeft]; 
       [self.TabView endUpdates]; 

      } 
      else 
      { 
       [ItemsInSection[indexPath.section] removeObject:obj4]; 
       [self.TabView beginUpdates]; 
       [TabView deleteRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationLeft]; 

       [self.TabView endUpdates]; 

      } 
      } 
      break; 

        default: 
      break; 
    } 

} 
+2

Sie sollten Ihren Code veröffentlichen. Es klingt für mich das Problem ist woanders. Warum möchten Sie außerdem die gesamte Tabellenansicht neu laden, wenn Sie eine Zelle auswählen? Bitte beschreiben Sie das eigentliche Ziel, das Sie erreichen möchten, anstatt nach einer Lösung für einen nicht funktionierenden Versuch zu suchen. – ozgur

Antwort

0

Ich habe die Lösung für dieses Problem gefunden. Die Hintergrundfarbe von UITableViewCell wurde eingestellt, um die Farbe zu löschen, und die Hintergrundfarbe von UIView auf der UITableViewCell wurde ebenfalls eingestellt, um die Farbe zu löschen. Das Ändern dieser Einstellungen zeigt das Einfügen von Zeilen in UITableView in iPad-Simulator.

2

Sie sind in der Tabellenansicht Delegat Tabellenansicht Nachladen Auf Tableview Auswahl Delegatmethode ihre zugehörigen Auswahlanimationsprozess haben. Ich werde Ihnen vorschlagen, den gesamten Code innerhalb dieser Methode in eine separate Methode zu verschieben. und rufe diese Methode auf.

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(),^{ 
      [self.aiTableView beginUpdates]; 
      // your table view selection code 
      [self.aiTableView endUpdates]; 
    }); 
+0

Das behebt mein Problem nicht. NumberOfRowsInSection-Methoden gibt no.of-Zeilen zurück. Es wird jedoch nicht in UITableView eingefügt. Dies geschieht nur auf dem iPad. Mein ursprünglicher Code funktioniert gut in iPhone. Ich frage mich, was könnte das Problem sein – user5553647

+0

Bitte versuchen Sie, indem Sie alle meine Code von dispatch_after() in dispatch_async (dispatch_get_main_queue(),^{}); Stellen Sie sicher, dass Sie nicht mehr die Delegiertenauswahlmethode für die Tabellenansicht verwenden, wenn dieser Codeblock aufgerufen wird. – kaushal

+0

Ich bin mir nicht sicher über das Verhalten Ihres Codes mit iPhone und iPad. :) – kaushal

Verwandte Themen