0

EDIT: Die akzeptierte Antwort erfüllt meine Bedürfnisse, aber ich bin immer noch offen für verschiedene Ansätze.Gibt es eine Möglichkeit, einen Controller nur in iOS vorstellbar zu machen (vielleicht auch in macOS)?

Ich kam diese Frage auf. Ich habe einen Controller und möchte, dass er nur vorzeigbar ist. Wenn ein Controller versucht, es zu schieben oder versucht, es mit anderen Segmenten zu zeigen, sollte die App es nicht zeigen. Lassen Sie mich mit einem Beispiel verdeutlichen:

class OnlyPresentableController : UIViewController{ 

    ///imagine a variable like this exists. 
    override var isOnlyPresentable : Bool{ 
     return true 
    } 
    //........ 
} 


class SomeController : UIViewController{ 

    //..... 

    @IBAction func aButtonClick(_ sender: UIButton) { 

     let controller = OnlyPresentableController(nibName: "OnlyPresentableController", bundle: Bundle.main) 

     //this will work 
     present(controller, animated: true, completion: nil) 
    } 
    @IBAction func anOtherButtonClick(_ sender: UIButton) { 

     let controller = OnlyPresentableController(nibName: "OnlyPresentableController", bundle: Bundle.main) 

     //this will not work because controller is an only presentable one. 
     navigationController?.pushViewController(controller, animated: true) 
    } 

} 

Also was denkst du? Ist das umsetzbar?

Antwort

1

Also habe ich eine Idee über das Verhindern des Schiebens. Sie können Swizzling verwenden, um die Funktion pushViewController zu vertauschen. Also in der Swizzles-Funktion überprüfen Sie, ob der View-Controller eine Instanz von OnlyPresentableController ist, und dann tun Sie nichts, wenn Sie nicht mit dem Push fortfahren können.

Hinweis: Ich nehme an, Sie wissen über Methode Swizzling

+0

Hmm ... Das kann meine Bedürfnisse erfüllen. Aber mein spezieller Code wird in dieser Situation Teil eines Frameworks sein. Wird das Swizzling in jeder Situation in jedem Code eines Projekts sicher sein? –

+1

Swizzling ist besonders gefährlich, wenn niemand in Ihrem Projekt darüber informiert ist und es leider einige Probleme gibt, die nicht ohne Swizzling gelöst werden können. Es sollte in Ordnung sein, wenn es Teil eines Frameworks ist. –

Verwandte Themen