iPhone: visualizzazione DataGrid personalizzata, sottoclasse UITableView o altro?
-
06-07-2019 - |
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.
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
edatasource
. - 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:
enumberOfColsInDataGridView:
e i metodi delegatiheightForCellAtIndexPath:
ewidthForCellAtIndexPath:
(o, se non implementato, utilizza le proprietàcellWidth
ecellHeight
predefinite) per calcolare le dimensioni della griglia e impostare le proprietà di scorrimentocontentSize
. - 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.
Ho appena risposto a una domanda come questa: ci sono alcune altre opzioni che ho trovato:
https://github.com/AlanQuatermain/AQGridView (gratuito)
http://ioscomponents.com/Home/Products (Commerciale - molte funzionalità 29 USD)
https: // www. developergarden.com/en/marketplace/components/details/cmp/ios-data-grid-table-view (commerciale 129 USD)
http://www.binpress.com/ app / vertical-horizontal-scrolling-datagrid-for-ios / 1082 (commerciale)