Scelta corretta del design per il mantenimento della vista "statica" su più controller?

2

Per prima cosa, non sono sicuro che lo stia chiedendo alla comunità di Stack Exchange corretta, quindi se questa domanda appartiene a qualcos'altro, faccelo sapere. Non sembrava appropriato per Stack Overflow.

Sto sviluppando un'app audiobook per iOS che utilizza un controller di navigazione per navigare tra due TableViewControllers. Il primo controller di visualizzazione contiene un elenco di libri tra cui scegliere e il secondo contiene l'elenco dei capitoli di quei libri. Quando un utente fa clic sul pulsante di riproduzione di una riga di capitolo, inizia a riprodurre l'audio per quel capitolo.

Nella parte inferiore di ciascun controller di visualizzazione ho creato una vista personalizzata che contiene i componenti di un lettore audio standard (pulsante di riproduzione / pausa, slider della traccia, durata, etichette per la traccia corrente in riproduzione):

Ogni controller di visualizzazione ha la sua istanza della vista del lettore audio; non c'è una visione condivisa del lettore audio globale (non penso che tu possa farlo anche su iOS?).

Desidero che lo stato del lettore audio nella parte inferiore di entrambi i controller mantenga uno stato condiviso mentre un utente naviga intorno all'app. Ad esempio, un utente gioca la riga del capitolo 1. Ho bisogno della vista del lettore audio nella parte inferiore di ciascun controller per visualizzare che la voce del capitolo 1 è in riproduzione.

Come posso ottenere questo? Sono abbastanza nuovo per lo sviluppo di iOS, ma credo che sia necessario definire un protocollo delegato per la visualizzazione del lettore audio e che ogni controller di visualizzazione lo implementa? O c'è un modo migliore per implementare il mio lettore audio; magari creando un UIToolbar personalizzato?

    
posta Gthoma2 20.01.2017 - 16:17
fonte

1 risposta

2

Questo è il posto migliore dove chiedere quanto posso dire. Per prima cosa chiariamo la domanda implicita.

È abbastanza possibile avere una vista condivisa del lettore audio. Lo farei creando un controller di visualizzazione contenitore personalizzato che contiene un UINavigationController e una vista con i controlli del player. Potrebbe essere possibile sottoclasse UINavigationController e metti la vista giocatore direttamente sulla sua vista.

Se segui una di queste idee, allora il tuo problema è risolto per questo caso speciale, ma la domanda che stai facendo è ancora valida. Mi aspetto che ad un certo punto della tua carriera dovrai condividere lo stato tra più controller di visualizzazione ed è importante che tu sappia come.

A seconda della tua esperienza, il semplice fatto che io abbia formulato la tua domanda come una delle "condizioni di condivisione" potrebbe averti spinto a generare la tua risposta. In caso contrario, ti incoraggio a pensarci prima di continuare a leggere di seguito.

Il modo più semplice per condividere lo stato tra i controller di visualizzazione è la condivisione letterale di un oggetto che contiene lo stato tra tali controller di visualizzazione. Un metodo migliore consiste nell'impostare un modello di osservatore sul soggetto del modello e che entrambi i controller di vista si colleghino come osservatori al modello. Quando il modello cambia stato, i controllori della vista verranno avvisati e potranno aggiornare i loro stati di visualizzazione di conseguenza.

    
risposta data 12.02.2017 - 22:38
fonte

Leggi altre domande sui tag