2014-04-13 8 views
6

Jak mogę to zrobić bez ponownego ładowania całej tabeli?Ponowne ładowanie tabeli Wyświetl nagłówek w ios7

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 

    UIView *header; 

    if(!self.searchBar) 
    { 
     self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 10, 270, kRowHeight)]; 
     self.searchBar.delegate = self; 
     self.searchBar.barStyle = UISearchBarStyleDefault; 
     self.searchBar.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; 
     self.searchBar.barTintColor = [UIColor clearColor]; 
    } 

    if(!self.placeholderSearchBarView) 
    { 
    self.placeholderSearchBarView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 270, kSearchBarPlaceholderHeight)]; 
    self.placeholderSearchBarView.backgroundColor = [UIColor colorWithWhite:0.9 alpha:0.7]; 

    } 

    if (self.showSearchBar) 
    { 
     for (UIView *v in self.tableView.tableHeaderView.subviews) 
     { 
      if (v.tag == 3433) 
      { 
       [v removeFromSuperview]; 
      } 
     } 
     header = self.searchBar; 
    } else { 
     header = self.placeholderSearchBarView; 
    } 

    return header; 
} 
+0

wiem, że umieścić nagłówek, ale masz na myśli [ 'tableViewHeader'] (https : //developer.apple.com/library/ios/documentation/UIKit/Reference/UITableView_Class/Reference/Reference.html#//apple_ref/occ/instp/UITableView/tableHeaderView) lub nagłówek sekcji? dodawać także niektóre kodu gdzie konfiguracja nagłówek proszę – Rich

+0

@Rich, aktualizować mój post, mam jeden odcinek, to nagłówek sekcji – user3527777

Odpowiedz

4

Trzeba użyć -reloadSections:withRowAnimation:

Więc kiedy trzeba zaktualizować nagłówki:

NSIndexSet *headers = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [self.tableView numberOfSections])]; 
[self.tableView reloadSections:headers withRowAnimation:UITableViewRowAnimationAutomatic]; 

Jeśli masz tylko jedną sekcję (jak już wspomniano w zaktualizowanym pytanie) możesz po prostu zadzwonić pod numer

[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationAutomatic]; 
+0

to ładuje cały stół – user3527777

+0

Pozwól mi zaktualizować odpowiedź z sugestią :) – Rich

+0

@ user3527777 acutally before I do - co próbujesz zrobić z 'tableHeaderView' w' tableView: viewForHeaderInSection: 'metoda? – Rich

9

Musisz przeładować całą sekcję, aby ponownie załadować h eader.

[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:section] withRowAnimation: UITableViewRowAnimationAutomatic]; 

LUB

Można chwycić uchwyt do widoku i aktualizować je ręcznie:

UIView *headerView = [self.tableView headerViewForSection:section]; 
//... update your view properties here 
[headerView setNeedsDisplay]; 
[headerView setNeedsLayout]; 
+0

Przy drugim podejściu jak powinienem ustawić nagłówek tableView? To nie działa, działa, jeśli używam self.tableView.tableHeaderView = headerView; [self.tableView.tableHeaderView setNeedsDisplay]; [self.tableView.tableHeaderView setNeedsLayout]; – user3527777