5

Nella mia app ho una pagina iniziale che ha una scheda/griglia con una sezione multipla. Quindi UICollectionView è la scelta più ovvia qui. Ma queste carte variano molto nel design, caricando anche i dati e le loro funzionalità. Quindi mettere tutti quelli in un unico controller sarebbe ingombrante, complesso e difficile da mantenere. Quindi abbiamo pensato di doverli separare nel loro UIViewControllers. Ognuno gestisce un tipo di carta e calcola il suo contenuto Dimensione da mostrare all'interno di una carta. Il nostro controller principale della home page è responsabile solo per inserire le visualizzazioni di viewcontroller all'interno delle celle UICollectionView.Incorporamento di UIViewcontrollers all'interno di UICollectionviewCells

Per summerize,

  • Un HomeViewController che ha una CollectionView
  • Ogni vista all'interno del collectionViewCell ei relativi dati sono mantenuti dalla propria classe controller.
  • Tutte le istanze del controller sono all'interno del HomeViewController e added as its children .- Apple Guide
  • The appearance call s per tutti i bambini viewControllers sono fatti da noi stessi in quanto il contentSize (che viene utilizzato come oggetto la dimensione per il layout CollectionView) calcolo, delle viste del controllore è necessario caricare la vista e impostare i dati.

La mia domanda è questa, questa scelta di progettazione è giusta? O quale approccio sceglieresti per implementare tale schermo? Dato che creiamo molti viewControllers (uno per ogni cella), ciò influisce sulla memoria o sulle prestazioni? E se voglio mettere in cache solo alcuni viewControllers o caricarli mentre l'utente scorre o quando è il momento di aggiungerlo alla cella collectionView, come faccio a farlo mentre il calcolo della dimensione di quella cella dipende dai dati e dalle viste durante la posa fuori dal layout CollectionView.

risposta

1

Penso che il tuo approccio sia valido e da un punto di vista teorico ha senso separare una vista dai suoi dati. Ma in questo caso preferirei che la sottoclasse UICollectionViewCell implementasse i propri dati, agendo fondamentalmente come un viewController. Questo semplificherà un po 'il tuo codice dato che non hai bisogno di viewControllers aggiunti e del codice che viene fornito con loro; invece puoi semplicemente aggiungere il tuo tableView al contentView della cella. Questo mi sembra più naturale, poiché in questo modo puoi avere la collectionView di HomeViewController che gestisce automaticamente i suoi delegati quando le celle vengono spostate fuori dallo schermo e durante e durante il processo di caricamento. Non avrai bisogno di inviare messaggi alle celle su chi sono o quando dovrebbero caricare, questo sarà tutto a tuo carico automaticamente. Inoltre, non credo davvero che avere i metodi di visualizzazione del ciclo di vita su ciascuna cella sia prezioso, ed è meno intuitivo rispetto al caricamento e all'aggiornamento di una cella come parte di un insiemeView. In entrambi i casi funziona, buona fortuna!

+0

Capisco perfettamente quando dici che sembra un eccesso. Forse non ero molto chiaro quando ho detto che il design t, il caricamento dei dati varia molto da una scheda all'altra. Una scheda potrebbe anche avere un oggetto TableView all'interno o un altro insiemeView o un insieme complesso di viste. Come quei delegati di TableView o quelle di altre Viste all'interno di quelle viste. Quindi avrò bisogno di un "oggetto che gestisce una vista e i suoi dati", che a me sembra una definizione di UIViewController. Così ho deciso di usare un viewcontroller. – akshaynhegde

+0

E riguardo l'uso di un viewcontroller per una sezione, potrebbe esserci di nuovo un tipo simile di schede pop-up in diverse sezioni, quindi quale tipo di schede potrebbe essere presente in ogni sezione non è definito fino a quando non recupero i dati dal server. Queste informazioni (tipo di carta, dati o come dovrebbe apparire) sono definite sul lato server. Così finirò per creare un controller che dovrebbe sapere come gestire ogni tipo di scheda. – akshaynhegde

+0

Sto affrontando lo stesso problema ora, quello che ho fatto è prendere uno screenshot della vista del View Controller salvarlo nella cache e usare quello screenshot in UICollectioVisualCell tutto va bene tranne uno scroll discontinuo durante la prima volta, Dal momento che crea la vista e prende screenshot quando la cella viene caricata per la prima volta. Ho bisogno di qualche suggerimento o miglioramento – Koushik

Problemi correlati