Hintergrund:Zugang UIViewController von Utility-Klasse
Ich versuche, meinen Code für die Wiederverwendung zu organisieren. Ich möchte eine Utility-Klasse behalten, die alle meine Logik zum Anklicken von Schaltflächen auf Android verarbeitet, und ich versuche, etwas ähnliches mit iOS zu tun.
Ich habe eine Datei namens ButtonClicks
mit einer statischen Methode ClickAction
.
Von einer benutzerdefinierten UIButton
, die ich erweitert, um einige Daten hinzuzufügen, verwende ich die #selector
innerhalb der UIViewController
.
Inside View Controller:
button.addTarget(self, action: #selector(onClick(sender:)), for: .touchUpInside)
// ...
@objc func onClick(sender: Button){
ButtonClicks.ClickAction(Button: sender)
}
Das funktioniert ziemlich viel wie erwartet, mit Ausnahme neuer UIViewControllers
des Übergangs, wenn nötig.
Frage:
Wie kann ich eine neue modale UIViewController
von einer Utility-Klasse öffnen?
ich zur Zeit eine Ansicht Objekt übergeben, so habe ich versucht, die folgenden in der ButtonClicks Klasse:
Class ButtonClicks {
static func ClickAction(Button: Button) {
...
// logic for sorting out which action to take
...
let modalViewController = ModalViewController()
modalViewController.modalPresentationStyle = UIModalPresentationStyle.formSheet
modalViewController.modalTransitionStyle = UIModalTransitionStyle.coverVertical
Button.superview?.window?.rootViewController?.present(modalViewController, animated: true, completion: nil)
Dieser Code startet einen View-Controller, der den gesamten Bildschirm in schwarz deckt, die .formSheet
Parameter ignoriert und Verlassen der App auf einem schwarzen Bildschirm. Es tut print()
Logik von der ModalViewController
zum Debug-Bereich obwohl.
Ändern der presentationtyle zu .partialCurl
gibt diesen Fehler:
Application tried to present UIModalTransitionStylePartialCurl to or from non-fullscreen view controller
was über Ihren aktuellen View-Controller in die Funktion, so dass es vorbei Kann zum Präsentieren verwendet werden? – hakkurishian
so übergeben (Button: Button, UIViiewController: View) oder etwas zur Funktion? Ich werde es versuchen. Haben UI-Komponenten keinen Verweis auf ihre View-Controller? – SQLiteNoob
UIViews behalten diesen Verweis nicht (und sollten ihn nicht behalten), da sie kontextunabhängig sein sollen. Siehe https://stackoverflow.com/questions/1372977/given-a-view-how-do-i-get-its-viewcontroller – hakkurishian