在 swift 中隐藏一个 UIViewController(屏幕)
Hide a UIViewController (Screen) in swift
如您所见,屏幕流程如下:
单击 'screen A' 的 'button2' 后,应用会显示来自具有标签栏的同一故事板的 'screen B'。
单击 'screen B' 的 'red tab' 后,应用程序显示 'green button'(右上角)。
单击 'screen B' 的 'green button' 后,应用显示故事板 2 的 'screen C'。
我需要在单击 'screen C' 的后退按钮后返回到 'Storyboard 1' 的 'screen B',无论 'screen C' 究竟从哪里出现并且 [= 'Storyboard 2' 的 32=] 应该从上到下消失。
是否可以这样做,如果可以那么怎么做?
是的,您可以隐藏 UIViewController
,因为您的 UIViewController
只是正常的 UIView
。
所以只需为您的 UIView
创建一个 @IBOutlet
并使用 .hidden
方法
像这样:
@IBOutlet weak var mainview: UIView!
override func viewDidLoad() {
super.viewDidLoad()
mainview.hidden = true
}
编辑:
正确指定你想要达到的目标。你的显示 viewController 是来自屏幕 A 还是 B 并不重要,直到应该有一些条件或者 ViewController 需要一些输入值(字符串、整数等)来处理它。
编辑2:
参考这个答案 How to check which segue was used
编辑3:
根据您的编辑答案(移动到 ScreenC 到 ScreenB,无论 screenC 来自 ScreenA 还是 ScreenB)最好使用三个独立的 3 故事板并根据需要调用目标 ViewController。
这里是 ViewController
class 的代码(移动 ScreenA -> ScreenB 或 ScreenA -> ScreenC )
@IBAction func buttonAisClick(sender: AnyObject) {
// move to ScreenC directly
var moveToNextVC:ViewController3 = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController3") as! ViewController3
self.presentViewController(moveToNextVC, animated: true, completion: nil)
}
@IBAction func ButtomBisClick(sender: AnyObject) {
// move to ScreenB
var moveToNextVC:ViewController2 = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController2") as! ViewController2
self.presentViewController(moveToNextVC, animated: true, completion: nil)
}
代码 ViewController2
class(从 ScreenB -> ScreenC)
@IBAction func ScreenBbuttonIsClick(sender: AnyObject) {
// move to ScreenC
var moveToNextVC:ViewController3 = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController3") as! ViewController3
self.presentViewController(moveToNextVC, animated: true, completion: nil)
}
ViewController3
class 的代码(从 ScreenC -> ScreenB)
@IBAction func ScreenCbuttonIsclick(sender: AnyObject) {
var moveToNextVC:ViewController2 = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController2") as! ViewController2
self.presentViewController(moveToNextVC, animated: true, completion: nil)
}
我实现了 segue 并添加了动画,效果很好。
如您所见,屏幕流程如下:
单击 'screen A' 的 'button2' 后,应用会显示来自具有标签栏的同一故事板的 'screen B'。 单击 'screen B' 的 'red tab' 后,应用程序显示 'green button'(右上角)。 单击 'screen B' 的 'green button' 后,应用显示故事板 2 的 'screen C'。
我需要在单击 'screen C' 的后退按钮后返回到 'Storyboard 1' 的 'screen B',无论 'screen C' 究竟从哪里出现并且 [= 'Storyboard 2' 的 32=] 应该从上到下消失。
是否可以这样做,如果可以那么怎么做?
是的,您可以隐藏 UIViewController
,因为您的 UIViewController
只是正常的 UIView
。
所以只需为您的 UIView
创建一个 @IBOutlet
并使用 .hidden
方法
像这样:
@IBOutlet weak var mainview: UIView!
override func viewDidLoad() {
super.viewDidLoad()
mainview.hidden = true
}
编辑:
正确指定你想要达到的目标。你的显示 viewController 是来自屏幕 A 还是 B 并不重要,直到应该有一些条件或者 ViewController 需要一些输入值(字符串、整数等)来处理它。
编辑2:
参考这个答案 How to check which segue was used
编辑3:
根据您的编辑答案(移动到 ScreenC 到 ScreenB,无论 screenC 来自 ScreenA 还是 ScreenB)最好使用三个独立的 3 故事板并根据需要调用目标 ViewController。
这里是 ViewController
class 的代码(移动 ScreenA -> ScreenB 或 ScreenA -> ScreenC )
@IBAction func buttonAisClick(sender: AnyObject) {
// move to ScreenC directly
var moveToNextVC:ViewController3 = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController3") as! ViewController3
self.presentViewController(moveToNextVC, animated: true, completion: nil)
}
@IBAction func ButtomBisClick(sender: AnyObject) {
// move to ScreenB
var moveToNextVC:ViewController2 = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController2") as! ViewController2
self.presentViewController(moveToNextVC, animated: true, completion: nil)
}
代码 ViewController2
class(从 ScreenB -> ScreenC)
@IBAction func ScreenBbuttonIsClick(sender: AnyObject) {
// move to ScreenC
var moveToNextVC:ViewController3 = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController3") as! ViewController3
self.presentViewController(moveToNextVC, animated: true, completion: nil)
}
ViewController3
class 的代码(从 ScreenC -> ScreenB)
@IBAction func ScreenCbuttonIsclick(sender: AnyObject) {
var moveToNextVC:ViewController2 = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController2") as! ViewController2
self.presentViewController(moveToNextVC, animated: true, completion: nil)
}
我实现了 segue 并添加了动画,效果很好。