2012-03-02 17 views
8

Qual è il modo più accurato per ottenere il titolo o l'indice della sezione più in alto in UITableView? Non intendo la sezione dell'indice 0, ma l'intestazione della sezione che è attualmente bloccata in alto durante lo scorrimento.Ottieni la sezione pin di UITableView corrente

risposta

13

È possibile ottenere la sezione nella parte superiore dello schermo in questo modo:

 NSUInteger sectionNumber = [[tableView indexPathForCell:[[tableView visibleCells] objectAtIndex:0]] section]; 

Ma, questo metodo potrebbe non essere ottimale per voi, perché otterrà il numero sarà strano quando si è nel periodo di transizione tra due intestazioni. Finché non hai bisogno di conoscere la sezione durante la transizione, dovresti stare bene. Spero che questo sia quello che stai cercando,

+0

Quale metodo dovrei mettere questo per mantenere la corrente sectionNumber? – Bot

+0

Scrollviewdidscroll se si desidera che si aggiorni ogni volta che l'utente scorre –

+1

Brillante, grazie! – devios1

-1

Chiedi alla classe di implementare UIScrollViewDelegate e implementare le seguenti funzioni. Assicurerà di recuperare la sezione solo quando tableview smette di scorrere.

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
{ 
    if (!decelerate) 
{ 
     // retrieve section here 
     section = [[[self.tableview visibleCells] objectAtIndex:0] section]; 
    } 
} 

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
     // retrieve section here 
     section = [[[self.tableview visibleCells] objectAtIndex:0] section]; 
} 
+0

Immagino che, facendo così, prevenga il problema di confondere le sezioni quando sono in transizione? – Bot

+0

Questo genera errori con la mia cella personalizzata per qualche motivo ... '- [Sezione AppointmentCustomCell]: selettore non riconosciuto inviato all'istanza 0x89af850'. Tutto quello che sto facendo è NSLoggiare la sezione nel codice sopra indicato. – Bot

+0

Questo è vecchio ma tutti i tipi di errori perché 'self.tableView visibleCells' fornisce' UITableViewCells' e non 'IndexPaths'. Dopo aver ottenuto indexPaths, possiamo fare indexPaths [0] .section. – esh

3

credo che invece di interrogare per i visibleCells, è meglio chiedere per i percorsi di indice seguente modo:

NSInteger section = [[[self.tableView indexPathsForVisibleRows] firstObject] section]; 

È possibile utilizzare questo codice in una delle UIScrollViewDelegate metodi secondo la vostra esigenze.

1

versione Swift

Usa primo (corrente appuntato) o ultima (ultima visualizzata)

if let section:Int = tableView.indexPathsForVisibleRows?.last?.section { 

     tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: section), atScrollPosition: UITableViewScrollPosition.None, animated: true) 

    } 
Problemi correlati