2013-10-08 21 views
5

Aggiungo una vista tabella a un controller di visualizzazione, quindi provo a modificare i titoli delle intestazioni di sezione in IOS 6.0.UITableView titleForHeaderInSection non viene chiamato

Sarò cambiando le stringhe di intestazione ogni volta una funzione specifica viene chiamata così io non voglio affrontare (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

Ho provato ad usare (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section ma quando ho messo un punto di interruzione vedo che il suo non essere chiamato.

lima in.h aggiungo UITableViewDelegate, UITableViewDataSource

in.m

-(void)viewDidAppear:(BOOL)animated 
{ 
    //tableview init 
    self.meetingList=[[UITableView alloc] initWithFrame:CGRectMake(10, self.ckCal.frame.origin.y + self.ckCal.bounds.size.height+20, 384, 450) style:UITableViewStylePlain]; 
    [self.meetingList setSeparatorStyle:UITableViewCellSeparatorStyleNone]; 
    self.meetingList.delegate=self; 

    //populate mutablearray for tableview here 
    [self eventsInThisMonth:[NSDate date]]; 

    [self.view addSubview:self.meetingList]; 
} 
-(void)eventsInThisMonth:(NSDate *)date 
{ 

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"MMMM , yyyy"]; 
    //self.firstSectionHeader=nil; 
    self.firstSectionHeader= [NSString stringWithFormat:@"Events in %@", [dateFormatter stringFromDate:date]]; 
    NSLog(@" self.firstSectionHeader %@ ",self.firstSectionHeader); 

} 
#pragma Tableview 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return [self.eventHeaders count] + 1; 

} 

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 
{ 
    return 35; 
} 
//set header section labels 
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 

    UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 35)] ; 
    [headerView setBackgroundColor:[UIColor colorWithRed:106/256.0 green:106/256.0 blue:106/256.0 alpha:1.0]]; 
    UILabel *subjectLabel = [[UILabel alloc] initWithFrame:CGRectMake(92, 10, tableView.bounds.size.width, 20)]; 
    subjectLabel.textColor = [UIColor whiteColor]; 
    subjectLabel.font = [UIFont fontWithName:@"Gill Sans" size:20]; 
    subjectLabel.backgroundColor = [UIColor clearColor]; 
    subjectLabel.text=self.firstSectionHeader; 
    NSLog(@"subjectLabel.text %@",subjectLabel.text); 

    if (section==0) { 

     //[headerView addSubview:subjectLabel]; 
     return headerView; 
    } 
    else 
     return nil; 


} 

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
{ 
    if (section==0) { 
     NSLog(@"self.firstSectionHeader in titleForHeaderInSection %@",self.firstSectionHeader); 
     return self.firstSectionHeader; 
    } 
    else 
     return nil; 
} 

Che cosa sto facendo di sbagliato?

+0

Guardando il tuo codice ... Perché dovresti usare entrambi, viewForHeaderInSection e titleForHeaderInSection? Stai impostando il titolo in viewForHeaderInSection comunque ... – Odrakir

risposta

15

Penso che probabilmente è perché si suppone che si utilizzi solo uno dei due: viewForHeaderInSection o titleForHeaderInSection.

+0

Cosa succede se voglio cambiare il backgroundcolor della sezione di intestazione. – user2858870

+0

Devi solo creare una nuova intestazione in viewForHeaderInSection. – Odrakir

+1

È possibile implementare entrambi. In viewForHeaderInSection suppongo tu abbia un UILabel (che contiene qualunque NSString tu stia usando per il titolo). Basta impostare quella stringa chiamando titleForHeaderInSection: Il meglio di entrambi i mondi. – Doc

1

Ti manca self.meetingList.datasource = self;

Ricordate che il vostro viewController deve implemente l'UITableViewDelegate e UITableViewDataSource.

YourClass : UITableView <UITableViewDelegate, UITableViewDataSource> 
+0

La tua risposta è a metà corretta, ho provato a sviare la tua risposta, ma non posso rinunciare senza abbastanza reputazione. – user2858870

+0

vedo troppo male :( – artud2000

0

quello che dovete fare

self.meetingList.dataSource=self; 

in viewDidAppear.

1

Ri: Cosa sto facendo di sbagliato.

Non sono sicuro se si imposta origine dati e delegato sul controller di visualizzazione in Interface Builder o meno. Ma credo che ci sia un errore logico che influisce sul risultato atteso.

titleForHeaderInSection: Richiede l'origine dati per il titolo dell'intestazione della sezione specificata della vista tabella.

frattempo

tableView: viewForHeaderInSection: chiede il delegato per una sottofinestra da visualizzare nell'intestazione della sezione specificata della vista tabella.

L'ultimo metodo è il comportamento di override definito per titleForHeaderInSection. Pensare in questo modo; hai uno spazio di intestazione che può contenere un titolo OPPURE una visualizzazione personalizzata che crei per sostituire il predefinito (titolo). Stai dicendo al compilatore di usare una vista personalizzata implementando il secondo metodo. Per correggere questo commento o rimuovere tableView: viewForHeaderInSection: metodo o modificare la logica in modo da aggiornare il titolo nella visualizzazione personalizzata che si passa al metodo. A quel punto titleForHeaderInSection dovrebbe essere colpito correttamente.

Si prega di considerare di accettare questa risposta se riesce a risolvere la domanda iniziale.

0

So che questo thread è un po 'vecchio, ma assicuratevi di avere anche:

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{

tableView avrà bisogno di conoscere l'altezza prima di poter afferrare la vista.

0

Inoltre, è necessario non implementare sia

(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 

e

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

Se si implementare almeno uno primo metodo, poi

- (NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
non saranno chiamati

.

Problemi correlati