2012-12-15 21 views
0

我有一個包含事件的數組。所有這些事件都顯示在UITableView中。每次打印新的活動日期時,如何設置新的章節標題?在UITextView中顯示錶格的動態標題

E.g.: 

20.12.2012 
- event 1 
- event 2 
- event 4 

21.12.2012: 
- event 3 

22.12.2012: 
-event 5 

這是我的事件對象的樣子:

events = [NSMutableArray arrayWithCapacity:20]; 

Event *e1 = [[Event alloc] init]; 
e1.date = @"20.12.2012"; 
e1.time = @"15:00 Uhr"; 
e1.address = @"Bla"; 
[events addObject:e1]; 

Event *e2 = [[Event alloc] init]; 
e2.date = @"20.12.2012"; 
e2.time = @"16:00 Uhr"; 
e2.address = @"Bla"; 
[events addObject:e2]; 

Event *e3 = [[Event alloc] init]; 
e3.date = @"20.12.2012"; 
e3.time = @"16:30 Uhr"; 
e3.address = @"Bla"; 
[events addObject:e3]; 

Event *e4 = [[Event alloc] init]; 
e4.date = @"21.12.2012"; 
e4.time = @"17:30 Uhr"; 
e4.address = @"Bla"; 
[events addObject:e4]; 

非常感謝您!

+0

也許這不是真的是你的問題最好的標題? – Mert

+0

提供一個更好的,我會改變它! – doonot

回答

0

您可以保存所有的事件,其中有日期作爲鍵的字典。

假設您的頭文件(.h)文件中有_eventsDictionary_events作爲ivar。 NSMutableDictionary *_eventsDictionary;NSArray *_events

- (void)reloadTableData { 
    _eventsDictionary = [NSMutableDictionary dictionary]; 
    for (Event *ev in _events) { 
     NSMutableArray *eventArray = [_eventsDictionary objectForKey:ev.date]; 
     if (! eventArray) { 
      // first event for this date 
      eventArray = [NSMutableArray array]; 
      [_eventsDictionary setObject:eventArray forKey:ev.date]; 
     } 
     [eventArray addObject:ev]; 
    } 
    [self.tableView reloadData]; 
} 

現在,你必須在陣列中的所有事件,這是在_eventsDictionary

- (NSString *)dateStringAtIndex:(NSInteger)index { 
    // Actually I prefer sort them as date objects 
// Since you have all dates as string, it should ok for you 
    NSArray *allSortedKeys = [[_eventsDictionary allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; 

    return [allSortedKeys objectAtIndex:index]; 
} 
- (NSArray *)eventsArrayAtIndex:(NSInteger)index { 

    NSArray *eventsArray = [_eventDictionary objectForKey:[self dateStringAtIndex:index]]; 
    return eventsArray; 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return _eventDictionary.count; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 

    return [[self eventsArrayAtIndex:section] count]; 
} 

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
return [self dateStringAtIndex:section]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    cell = ..... 
    ..... 

    NSArray *eventsArray = [self eventsArrayAtIndex:indexPath.section]; 
    Event *ev = [eventsArray objectAtIndex.row]; 
    // configure your cell with the event 
    // eg. cell.textLabel.text = ev.time 
    return cell; 
} 

現在你可以調用[自我reloadTableData]後的地方你的事件在你的事件數組,它使工作適合你。

+0

感謝amigo!享受我的50點聲譽:) – doonot

0
  1. 計算所有事件中唯一日期的數量;
  2. 實施

    -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
        return numberOfUniqueDates; 
    } 
    
  3. 實施

    -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
        return [eventsData[section] count]; 
    } 
    
  4. -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    
        Use indexPath.section and indexPath.row to determine the values for cells; 
    } 
    
  5. 實施

    - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
        return date[section]; 
    } 
    
0

不要忘記添加

[yourTableView reloadData]; 

您更新的tableView的內容後...