有没有办法让控制器只在 iOS 中显示(也许在 macOS 中也是如此)?
Is there any way to make a controller only presentable in iOS (maybe in macOS too)?
编辑:接受的答案满足了我的需求,但我仍然对不同的方法持开放态度。
我想到了这个问题。我有一个控制器,我希望它只是像样的。如果某些控制器试图推动它或试图与其他 segues 一起显示它,应用程序不应显示它。让我用一个例子来说明:
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)
}
}
那你怎么看?这个可以实现吗?
所以我有一个关于防止推送的想法。您可以使用 Swizzling 来 swizzle pushViewController
函数。因此,在 swizzles 函数中,您检查视图控制器是否是 OnlyPresentableController
的实例,然后什么也不做,如果不是,您可以继续推送。
注意:我假设您了解 Method Swizzling
编辑:接受的答案满足了我的需求,但我仍然对不同的方法持开放态度。
我想到了这个问题。我有一个控制器,我希望它只是像样的。如果某些控制器试图推动它或试图与其他 segues 一起显示它,应用程序不应显示它。让我用一个例子来说明:
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)
}
}
那你怎么看?这个可以实现吗?
所以我有一个关于防止推送的想法。您可以使用 Swizzling 来 swizzle pushViewController
函数。因此,在 swizzles 函数中,您检查视图控制器是否是 OnlyPresentableController
的实例,然后什么也不做,如果不是,您可以继续推送。
注意:我假设您了解 Method Swizzling