Ho una vista Contenitore che ho inserito nel mio storyboard. C'è una piccola e meravigliosa freccia che rappresenta i passaggi incorporati in un'altra scena. L'oggetto di livello superiore di quella scena è controllato da un numero personalizzato UIViewController
. Voglio chiamare un metodo che è implementato nella mia classe personalizzata. Se ho accesso al contenitore, come faccio a ottenere un riferimento a cosa c'è dentro?Come ottengo le viste in un contenitore in Swift?
risposta
È possibile utilizzare prepareForSegue
, un metodo in UIViewController
, per ottenere l'accesso a qualsiasi UIViewController
essere segued a dal controller visualizzazione corrente, questo include embed
segues.
Dalla documentazione su prepareForSegue
:
L'implementazione predefinita di questo metodo non fa nulla. Il controller della vista sovrascrive questo metodo quando è necessario passare i dati rilevanti al nuovo controller della vista. L'oggetto segue descrive la transizione e include riferimenti a entrambi i controller di vista coinvolti nel seguito.
Nella tua domanda hai menzionato la necessità di chiamare un metodo sul tuo controller di visualizzazione personalizzato. Ecco un esempio di come potresti farlo:
1. Dai al tuo embed segue un identificatore. Puoi farlo in Interface Builder selezionando il tuo seguito, passando all'Editor degli attributi e guardando sotto Storyboard. Inserisci segmento.
2. Crea il tuo classi qualcosa come:
viene mantenuto un riferimento a embeddedViewController
così myMethod
può essere chiamato in seguito. È dichiarato come facoltativo da scartare implicitamente perché non ha senso dargli un valore iniziale non zero.
// This is your custom view controller contained in `MainViewController`.
class CustomViewController: UIViewController {
func myMethod() {}
}
class MainViewController: UIViewController {
private var embeddedViewController: CustomViewController!
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vc = segue.destination as? CustomViewController,
segue.identifier == "EmbedSegue" {
self.embeddedViewController = vc
}
}
// Now in other methods you can reference `embeddedViewController`.
// For example:
override func viewDidAppear(animated: Bool) {
self.embeddedViewController.myMethod()
}
}
3. Impostare le classi del vostro UIViewControllers
in IB utilizzando il Identity Inspector. Per esempio:
E ora tutto dovrebbe funzionare. Spero possa aiutare!
La risposta di ABaker è un ottimo modo per i genitori di conoscere il bambino. Per il codice nel bambino per raggiungere il genitore, utilizzare self.parent
(o in ObjC, parentViewController
).
- 1. Swift: controllo segmentato con un movimento rapido tra le viste
- 2. Delegare utilizzando la vista Contenitore in Swift
- 3. Come ottengo il messaggio di errore in Swift 2.0?
- 4. Come memorizzare le viste in Android?
- 5. Scambio di viste secondarie in una vista Contenitore
- 6. Come modificare le viste in CouchDB Futon?
- 7. Da Swift REPL, come ottengo un elenco di moduli disponibili?
- 8. Come ottengo tutte le variabili definite in un modello Django?
- 9. Come ottengo le categorie per un prodotto in Magento
- 10. Commutazione delle viste a livello di codice in Swift
- 11. Strategie per mappare le viste in NHibernate
- 12. Quali sono le migliori pratiche sulla comunicazione con le viste Contenitore
- 13. come utilizzare le viste dichiarate in un file xml di un layout in un altro layout
- 14. Perché le viste e le viste parziali hanno la stessa estensione di file cshtml in Razor?
- 15. Come ottengo un valore assoluto in Rust?
- 16. Come formattare le stringhe localizzate in Swift?
- 17. Cosa sono le viste in MySQL?
- 18. Come aggiungere le viste alle viste a livello di programmazione
- 19. come rimuovere le viste secondarie
- 20. Come ottengo le migliori prestazioni da .NET StreamWriter in C#?
- 21. Come si elencano tutte le viste indicizzate in SQL Server?
- 22. Come implementare le viste di effetti visivi in Interface Builder?
- 23. Come globalizzare le viste MVC ASP.NET (separatori decimali in particolare)?
- 24. Come posizionare un componente dinamico in un contenitore
- 25. Come dichiarare un contenitore autoreferenziale in C++?
- 26. Come si cambiano le viste in un'applicazione Cocoa?
- 27. Come ottengo le intestazioni di risposta in selenio?
- 28. Come ottengo tutte le proprietà CSS supportate in WebKit?
- 29. Come rimuovo gli spazi in UIToolbar tra le viste personalizzate?
- 30. UIImagePickerController forza le immagini in altre viste a dimensione intera
Prep forForSegue è una funzione sovrascritta da qualcos'altro? – FlaqueDeau
Questo ha funzionato bene, tuttavia ho notato che non ho bisogno del bit "where follows.identifier ==" EmbedSegue "', probabilmente avresti bisogno che se tu avessi più controller embedded, ma con solo uno, sembra che tu non ti 'ho bisogno dell'identificatore. – TaylorAllred