Domanda

Vorrei creare una griglia di dati che scorre sia verticalmente che orizzontalmente e ha intestazioni di riga e colonna appiccicose (in modo da poter scorrere i dati mentre si visualizzano ancora le intestazioni di riga / colonna). Qual è il modo migliore per farlo?

Ho pensato di creare la mia vista DataGrid personalizzata che gestisce il proprio rendering, ma questo sembra un sacco di lavoro. Sembra che l'aggiunta di più UITableViews a UIScrollView possa funzionare, ma non so come rendere appiccicose la prima riga e colonna mentre si scorre insieme le altre. O forse potrei sottoclasse UITableView e aggiungere colonne ad esso.

Per un esempio di qualcosa di simile a quello che sto cercando, vedi http://www.roambi.com / . Fai clic sull'esempio della SuperList e gioca con la vista lì.

Ho ricreato con successo l'effetto che sto cercando in un UIWebView con una semplice tabella HTML, JavaScript personalizzato e CSS, ma le prestazioni su iPhone sono terribili con questo metodo.

È stato utile?

Soluzione

Non credo che la sottoclasse di UITableView sia adatta alle tue esigenze. Ma è possibile replicare i modelli di progettazione utilizzati da UITableView. Ciò semplificherebbe lo sviluppo e l'utilizzo della vista.

Vorrei fare questo in questo modo:

  • Dichiarare i protocolli DataGridViewDelegate e DataGridViewDatasource che imitano le loro controparti UITableView.
  • DataGridView è una sottoclasse UIScrollView. Ha due Ivars delegate e datasource .
  • DataGridViewCell è una sottoclasse UIView simile a UITableViewCell.
  • Una categoria su NSIndexPath simile NSIndexPath (UITableView) che semplifica l'utilizzo di percorsi di indice per indirizzare righe, colonne e (facoltativamente, se si desidera implementarli) sezioni
  • DataGridView chiama i metodi dell'origine dati numberOfRowsInDataGridView: e numberOfColsInDataGridView: e i metodi delegati heightForCellAtIndexPath: e widthForCellAtIndexPath: (o, se non implementato, utilizza le proprietà cellWidth e cellHeight predefinite) per calcolare le dimensioni della griglia e impostare le proprietà di scorrimento contentSize .
  • Quando DataGridView deve essere visualizzato da solo o quando viene fatto scorrere, chiama il metodo dell'origine dati dataGridView: cellAtIndexPath: per ottenere la visualizzazione secondaria per ogni cella da visualizzare. Aggiungi questi come visualizzazioni secondarie. Implementa un sistema di riutilizzo delle celle come UITableView.
  • ...

Potrebbe sembrare un sacco di lavoro ma penso che sia fattibile. Non sono del tutto sicuro di come implementare al meglio le righe / le colonne di intestazione fisse (senza scorrimento).

Altri suggerimenti

Questo potrebbe soddisfare le tue esigenze, è ben fatto: https://github.com/AlanQuatermain/AQGridView

Un'altra alternativa potrebbe essere questa Griglia dati iOS componente - non è gratuito, ma abbastanza completo, come la cancellazione di righe animate e la personalizzazione di bordi / colori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top