有没有办法让控制器只在iOS中出现(也许在macOS中)?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有办法让控制器只在iOS中出现(也许在macOS中)?相关的知识,希望对你有一定的参考价值。
编辑:接受的答案是满足我的需求,但我仍然对不同的方法持开放态度。
我想出了这个问题。我有一个控制器,我希望它只是表现。如果某个控制器试图推送它或尝试用其他segue显示它,应用程序不应该显示它。让我用一个例子来澄清:
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来调配pushViewController
功能。所以在swizzles函数中你检查视图控制器是否是OnlyPresentableController
的实例然后你什么都不做,如果没有你可以继续推动。
注意:我假设你知道Method Swizzling
以上是关于有没有办法让控制器只在iOS中出现(也许在macOS中)?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法让拖尾的滑动操作像 macOS 11.0 一样具有圆角?
有没有办法让 Firefox 与 macOS 钥匙串一起工作?如果不是很好的替代密码管理器?
有没有办法让 CURRENT_TIMESTAMP 只在数据库中存储日期、小时和分钟?