2010-03-02 9 views
9

Ho qualche codice molto semplice per restituire il titolo per un'intestazione di sezione:UITableView titleForHeaderInSection non visualizzare correttamente

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
    if (section==0) { 
     return @""; 
    } else if (section==1) { 
     return @"Actions"; 
    } else if (section==2) { 
     return @"Attached To"; 
    } 

    return @""; 
} 

Per qualche ragione quando le intestazioni sono effettivamente visualizzate sul simulatore, la metà del tempo che sono semplicemente la prima lettera e poi le ellissi. Scorrendo verso l'alto e verso il basso (per aggiornare la vista dell'intestazione molto probabilmente) il titolo mostrerà correttamente circa la metà del tempo e mostrerà erroneamente l'altra metà del tempo.

Qualcuno ha idea di cosa potrebbe causare questo? Penso che questo sia più di uno sviluppo recente, ma sembra accadere in quasi tutti gli UITableView s nella mia applicazione. Non voglio dire che questo è un problema 3.2, ma potrebbe aver iniziato a succedere in quel momento, ma in qualche modo deve essere correlato al codice in qualche modo. Grazie.

risposta

5

ho capirlo: il vero problema con il codice stava tornando @"". Se si restituisce solo una stringa vuota, invece di zero, causerà un problema con la visualizzazione di intestazioni e piè di pagina.

È necessario invece restituire una stringa nil per visualizzare correttamente tutte le intestazioni e i piè di pagina. Restituire uno spazio @" " lascerà comunque lo spazio verticale per l'intestazione in modo che non sia un'opzione valida. Ho modificato tutte le istanze di return @""; semplicemente in return nil;

1

copia il codice & inserito in uno dei miei progetti e funziona in modo impeccabile. (sdk 3.2.1)

Forse l'errore si trova in un'altra parte? Stai creando i tuoi tablecell? In tal caso, stai restituendo l'altezza apropiate da "tableView: heightForRowAtIndexPath:"? (il problema mi ha colpito una volta)

1

Quando si impostano i titoli di intestazione di sezione, ho più successo nell'usare una NSString vuota che viene impostata nella sezione corrispondente, e successivamente rilasciare quella stringa una volta completata; oltre a limitare il mio utilizzo delle statuette If() Else() annidate.

Cerco di mantenerlo semplice e pulito. Ovviamente per quelle tabelle in cui ho più di 3 sezioni, uso un'istruzione "Switch" al posto delle istruzioni If().

Il bello di questa funzione è che viene chiamato tutte le volte (numero di sezioni) che si hanno e che scorrerà attraverso il codice ogni volta. Il NSString *sectionHeader=nil; fornisce al compilatore un valore da restituire, indipendentemente da ciò che è incorporato nelle istruzioni If(). Altrimenti, ricevi degli avvertimenti perché il compilatore non cerca all'interno delle istruzioni If() per il tuo valore di ritorno.

È inoltre possibile inizializzare la stringa su un valore "Predefinito", ad es. NSString *sectionHeader = @"Default Header Title";. Se non sono soddisfatte le istruzioni If(), il valore di intestazione predefinito assegnato rimarrà invariato per tutta la funzione e verrà quindi restituito come sectionHeader per il titolo.

Struttura di base In basso:

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

//TEMP SECTION STRING HOLDER: 
NSString *sectionHeader = nil; 


//SET TITLE FOR EACH SECTION: 
if(section == 0) { 
    sectionHeader = @"Section Header No. 1"; 
} 

if(section == 1) { 
    sectionHeader = @"Section Header No. 2"; 
} 

if(section == 2) { 
    sectionHeader = @"Section Header No. 3"; 
} 


//RETURN THE SECTION HEADER FOR EACH SECTION: 
return sectionHeader; 

} 
Problemi correlati