我的目标是以编程方式显示View Controller
当前视图控制器
然后,如果某个事件被调用或某事,(API或Websocket)我想以编程方式调用这些视图
但我想先调用最后一个视图Controller,它应该位于第一个View控制器之上
从技术上讲,最后一个视图将具有
Transition is Cross Dissolve
Presentation is Over Current Context
我该怎么做?
答案 0 :(得分:5)
我认为可重用视图的最佳方法是创建一个xib文件。然后,您可以创建单例并在每次要显示此模态视图时调用此视图。
要确保视图不与任何内容重叠,您必须将其添加到当前控制器,而不是添加到AppDelegate窗口。
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
appDelegate.window!.addSubview(yourModalView)
答案 1 :(得分:4)
根据您的要求,您可以为导航控制器设置storyBoardID。
在特定事件上,只需实例化导航控制器
let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
let myNavController = storyboard.instantiateViewController(withIdentifier: "MyStoryboardId") as? UINavigationController
然后出现或显示此导航控制器
self.present(myNavController, animated: true, completion: nil)
在第一个视图控制器的viewDidLoad()
方法上执行segue到popupViewController。
现在第二个视图将显示在第一个视图控制器上方。您可以在使用它后忽略此视图。
答案 2 :(得分:4)
您无需为弹出窗口创建整个UIViewController
。
您可以展示通常的UIView
。例如:
以编程方式创建视图:
let popupView: UIView = {
let view = UIView()
view.backgroundColor = .red
view.translatesAutoresizingMaskIntoConstraints = false
return view
}
在您需要时插入视图:
private func showPopup() {
view.addSubview(popupView)
popupView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
popupView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
popupView.widthAnchor.constraint(equalToConstant: 100.0).isActive = true
popupView.heightAnchor.constraint(equalToConstant: 100.0).isActive = true
}
您还可以在 popupView
let myLabel: UILabel = {
let label = UILabel()
label.text = "Test text"
label.backgroundColor = .red
label.translatesAutoresizingMaskIntoConstraints = false
return label
}
private func setupPopup() {
// add UILabel for example
popupView.addSubview(myLabel)
// Setup constraints for myLabel
....
}
答案 3 :(得分:4)
您可以通过覆盖app_name = 'clubinfo'
子类'init方法来完成此操作。
UIViewController
然后在您的其他class SomeViewController: UIViewController {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.modalTransitionStyle = .crossDissolve
self.modalPresentationStyle = .overFullScreen
}
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
self.modalTransitionStyle = .crossDissolve
self.modalPresentationStyle = .overFullScreen
}
// if this is a xib UIViewController, if not do not add this code
required init() {
// place the "SomeViewController's Nib Name" in the nibName to prevent crashes from iOS 8 devices
super.init(nibName: "SomeViewController's Nib Name", bundle: nil)
}
}
上,您可以初始化所述ViewController。
xib和/或以编程方式
UIViewController
<强>故事板强>
// instantiate your UIViewController
let viewController = SomeViewController()
self.present(viewController, animated: true, completion: nil)
确保您的视图层次结构如下所示
这应该是他们的属性
查看
半透明深色背景视图
Popover View
..无论你想要什么