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?
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? –
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. –