2009-10-10 15 views
21

jestem w obliczu problemu nie można rozwiązać ... Mam zgrupowanych tabeli, której nagłówek i stopka sekcja sekcja się prawidłowo wyświetlany po uruchomieniu dziękiZmiana nagłówka/stopki UITableView podczas uruchamiania aplikacji?

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 

i

- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section 

jednak Nie mogę wymyślić, jak zaktualizować je później, nie wiem, jak zmienić te teksty i to jest dość frustrujące, ponieważ moim zdaniem nie było to nic trudniejszego niż zmiana etykiety tekstowej czy cokolwiek ... (niektóre ". tekst "własność ...)

Przeszukałem całą dokumentację bez powodzenia ...

Każda pomoc jest wysoce wdzięczna! Pozdrawiam, Enrico

+0

Czy istnieje sposób zaktualizować nagłówków/stopek bez przeładowywania pełną tabelę ... lub całą sekcję? Zaktualizuj * TYLKO * nagłówki/stopki. – Patricia

+0

Nie wierzę, że aktualizowanie tylko części widoku tabeli przyniesie Ci wszystko, co zobaczysz, lub że zauważysz różnicę w wydajności. –

Odpowiedz

25

W metodzie delegata dodać wywołanie metody, która zwraca nazwę sekcji, np

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
    switch (section) { 
     case firstSectionTag: 
      return [self firstSectionTitle]; 
     case secondSectionTag: 
      return [self secondSectionTitle]; 
     // ... 
     default: 
      return nil; 
    } 
} 

- (NSString *)firstSectionTitle { 
    // generate first section title programmatically, e.g. "return [[NSDate date] description];" 
} 

// ... 

Wtedy, gdy trzeba zaktualizować tytuł sekcji, wyślij NSNotification która wyzwala coś jak następującej metody:

- (void)refreshTableSectionTitles:(NSNotification *)notification { 
    [tableView reloadData]; 
} 

Jeśli tabela jest duża i chcesz precyzyjną kontrolę, przejść się NSNotification z krytym NSDictionary który zawiera sekcję, którą chcesz odświeżyć, przeczytaj słownik w wersji -refreshTableSectionTitles, aby odzyskać sekcję NSInteger i użyj widoku tabeli -reloadSections:withRowAnimation: tabeli, aby ponownie załadować tę konkretną sekcję.

7

Można użyć:

-(void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation 

I

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 

zdefiniować nowy tekst nagłówka w oświadczeniu.

Spowoduje to utworzenie ładnej animacji podczas zmiany nagłówka/stopki.

4

Użyj tej linii w kodzie, w którym chcesz zmienić tytuł:

[[self theTableViewToChangeItsHeader]reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade]; 
+1

na iOS 7 powoduje to zniknięcie komórek w sekcji. – malhal

+0

To pytanie było związane z ios 5.1. Czy poważnie go zignorowałeś? : D –

-4

In Your użytku TableViewController

[self.tableView reloadSectionIndexTitles]; 
+0

nie ładuje ponownie tekstu stopki – malhal

+1

Dotyczy to tylko paska indeksu pokazanego wzdłuż prawej strony ekranu podczas przewijania. – macserv