Quando apro una vista UIV personalizzata da un UITableViewController, come posso chiudere la vista personalizzata e tornare alla vista tabella?
-
06-07-2019 - |
Domanda
Sto usando un UITableViewController
per un menu in un gioco. La vista tabella apre un controller di vista per il mio UIView
personalizzato che mostra il gioco. Quando il gioco termina, UIView
viene notificato (il che in qualche modo sta rovinando i principali MVC) e da lì mi sono quasi perso.
Domande:
- Un
UIView
può comunicare con il suo controller? Come? - Un controller può parlare con quello che l'ha avviato? Come?
- Come posso passare con garbo tra tutta questa complicata rete di visualizzazioni e controller?
Soluzione
-
Utilizza qui un protocollo delegato. Il tuo UIView di gioco personalizzato può utilizzare una proprietà
delegate
e chiamare metodi su questo delegato quando si verificano eventi (game over, game in pausa, view closed, ecc.) Ecco un ottimo post sull'uso dei delegati: Come posso creare delegati in Obiettivo- C? -
Consiglierei di usare un UINavigationController. Non devi necessariamente mostrare la barra di navigazione, ma se annidi i controller di visualizzazione in un controller di navigazione hai accesso a
-pushViewControllerAnimated:
e-popViewControllerAnimated:
che rendono è davvero facile navigare tra i livelli di controller di visualizzazione nidificati. -
Un altro vantaggio di UINavigationController: otterrai una bella animazione delle diapositive quando passi da una vista all'altra.
Esistono altri meccanismi di terze parti che potresti preferire rispetto ai meccanismi UIKit UINavigationController / UIViewController. Dai un'occhiata al progetto Three20 , in particolare la classe TTNavigationCenter.