2016-12-20 2 views
0

Ich habe timeSlotArr, die Daten in Form von gegeben enthält.UITableview mit mehreren Zeilen und Abschnitten

 timeSlotArr ++++++++ (
     { 
     availablenow = 0; 
     callbackSlotId = "96a8a387-a2a1-e611-8101-000c29821561"; 
     callbackSlotName = "07:00 AM"; 
     date = "2016-12-21"; 
     dateInUtc = "2016-12-21T01:30:00Z"; 
     day = Wednesday; 
    }, 
     { 
     availablenow = 0; 
     callbackSlotId = "9aa8a387-a2a1-e611-8101-000c29821561"; 
     callbackSlotName = "09:00 AM"; 
     date = "2016-12-21"; 
     dateInUtc = "2016-12-21T03:30:00Z"; 
     day = Wednesday; 
    }, 
     { 
     availablenow = 0; 
     callbackSlotId = "9ca8a387-a2a1-e611-8101-000c29821561"; 
     callbackSlotName = "10:00 AM"; 
     date = "2016-12-21"; 
     dateInUtc = "2016-12-21T04:30:00Z"; 
     day = Wednesday; 
    } 
) 

Ich möchte, dass meine Daten in UITableView mehrere Abschnitte und mehrere Zeilen darin anzuzeigen.

keine der Abschnitte entschieden basieren auf „Tag“ Taste (sections ist Array) und elementsInSection sind die Daten innerhalb Abschnitte

for (NSDictionary *dict in timeSlotArr) { 
    NSString *day = [dict objectForKey:@"day"]; 
    if (![sections containsObject:day]) { 
     [sections addObject:day]; 

     NSMutableArray *arr = [[NSMutableArray alloc] init]; 
     [arr addObject:dict]; 

     [elementsInSection addObject:arr]; 
    } else { 
     NSMutableArray *arr = [elementsInSection objectAtIndex:[sections indexOfObject:day]]; 
     [arr addObject:dict]; 

     [elementsInSection setObject:arr atIndexedSubscript:[sections indexOfObject:day]]; 
    } 
} 

NSLog(@"elementsInSection ++++++++ %@",elementsInSection); 
elementsInSection Returns 1 instead of 3 here is wrong... 3 means data of `timeSlotArr` with key `day` 

NSLog(@"sections ++++++++ %@",sections); //Returns 1 which is right 
+0

Diese Zeile entfernen und versuchen: [elementsInSection setObject: arr atIndexedSubscript: [Abschnitte indexOfObject: Tag]]; –

+0

Wie füge ich Element zu 'elementsInSection' hinzu? –

+0

Sie verwenden bereits diesen Array-Verweis NSMutableArray * arr = [elementsInSection objectAtIndex: [sections indexOfObject: day]]; und ein Element hinzufügen. Überprüfen Sie, wie viele Elemente gibt es in arr –

Antwort

1

Wie pro meine Erfahrung, die Sie über Abschnitte und Zeilenstruktur in Ihrem Tabellenansicht erreichen können durch Filtern Ihrer Daten wie folgt:

Schritt 1: Was Sie in den Abschnitten benötigen, ist Day. so erhalten wir alle einzigartigen Tage von Ihrem Array.

NSArray *uniqueDays = [arrayData valueForKeyPath:@"@distinctUnionOfObjects.day"]; 

Einzigartige Tage Ergebnis:

(
    Wednesday, 
    Monday, 
    Tuesday 
) 

Schritt 2: Jetzt müssen wir Tag weise Array enthält nur an diesem Tag Datenfeld:

NSMutableDictionary *dictData1 = [NSMutableDictionary dictionary]; 

for (NSString *strDay in uniqueDays) { 
    NSArray *filteredDay = [arrayData filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(day == %@)", strDay]]; 
    [dictData1 setObject:filteredDay forKey:strDay]; 
} 

Gefilterte Daten Ergebnis:

{ 
    Monday =  (
       { 
      availablenow = 0; 
      callbackSlotId = "9ca8a387-a2a1-e611-8101-000c29821561"; 
      callbackSlotName = "10:00 AM"; 
      date = "2016-12-21"; 
      dateInUtc = "2016-12-21T04:30:00Z"; 
      day = Monday; 
     }, 
       { 
      availablenow = 0; 
      callbackSlotId = "9ca8a387-a2a1-e611-8101-000c29821561"; 
      callbackSlotName = "10:00 AM"; 
      date = "2016-12-21"; 
      dateInUtc = "2016-12-21T04:30:00Z"; 
      day = Monday; 
     } 
    ); 
    Tuesday =  (
       { 
      availablenow = 0; 
      callbackSlotId = "9ca8a387-a2a1-e611-8101-000c29821561"; 
      callbackSlotName = "10:00 AM"; 
      date = "2016-12-21"; 
      dateInUtc = "2016-12-21T04:30:00Z"; 
      day = Tuesday; 
     } 
    ); 
    Wednesday =  (
       { 
      availablenow = 0; 
      callbackSlotId = "96a8a387-a2a1-e611-8101-000c29821561"; 
      callbackSlotName = "07:00 AM"; 
      date = "2016-12-21"; 
      dateInUtc = "2016-12-21T01:30:00Z"; 
      day = Wednesday; 
     }, 
       { 
      availablenow = 0; 
      callbackSlotId = "9aa8a387-a2a1-e611-8101-000c29821561"; 
      callbackSlotName = "09:00 AM"; 
      date = "2016-12-21"; 
      dateInUtc = "2016-12-21T03:30:00Z"; 
      day = Wednesday; 
     }, 
       { 
      availablenow = 0; 
      callbackSlotId = "9ca8a387-a2a1-e611-8101-000c29821561"; 
      callbackSlotName = "10:00 AM"; 
      date = "2016-12-21"; 
      dateInUtc = "2016-12-21T04:30:00Z"; 
      day = Wednesday; 
     } 
    ); 
} 

Jetzt können Sie Unique Days als sectionarray verwenden.

Und dictData Wörterbuch als Zeilenarray und Abrufdaten basierend auf Abschnitt.

Edit:verwenden nun über Filter-Array in der Tabellenansicht Methoden

#pragma mark --- UITableView DataSource methods 

//Section 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ 
    return uniqueDays.count; 
} 

//Row 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
    return [[dictData1 objectForKey:uniqueDays[section]] count]; 
} 

//Cell 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 

    UITableViewCell *aCell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 

    NSArray *arrDayData = [dictData1 objectForKey:uniqueDays [indexPath.section]]; 
    NSDictionary *dictDetail = arrDayData[indexPath.row]; 

    aCell.textLabel.text = dictDetail[@"callbackSlotId"]; 

    return aCell; 
} 

Lassen Sie mich wissen, wenn Sie irgend etwas anderes erforderlich.

+0

Wie zeige ich für 'numberOfRowsInSection' und' cellForRowAtIndexPath' –

+0

müssen nur Tag Array Count in Ihrem 'numberOfRowsInSection' übergeben und Sie können es auch in' cellForRowAtIndexPath' verwenden. – CodeChanger

+0

Bitte überprüfen Sie meine aktualisierte Antwort Sie können eine Idee, wie man 'Abschnitt',' Zeile' und 'Zelle' anzeigen – CodeChanger

Verwandte Themen