dev*_*eak 7 objective-c uikit ios swift
假设我有3个ViewControllers - A,B和C. A显示B,B显示C.然后我想回到A而不经过(视觉上)B(如主页按钮).我现在的问题是,当我放松到A时,会显示短时间B(调用viewWillAppear等方法).我该如何解决这个问题?
注1:与我的真实应用导航树相比,上面的例子是高度简化的,对我来说,使用NavigationController作为所有A,B和C的容器是不可能的(或者至少不可取).在转换过程中,很少有原因导致所有视图中存在复杂的嵌入段和不同的自定义转换(几乎所有动画转换都完全不同).
注2:我找到了一些伪解决方案,用于定义自定义segue并将其用作自定义展开Segue.这也是不可取的,因为我想使用我已经完成的过渡动画师.
任何帮助都非常感谢.
请注意,这是修改后的答案 - 回应下面的第一条评论。
我有一个可能的解决方案,似乎可行。但这可能不合适。我不确定,仅供考虑。
3 个视图控制器按照问题中的描述进行设置(第二个视图控制器是红色的,以便我注意到它在展开过程中是否可见)。

通过拖动到退出,在第三个视图控制器 (C) 中创建展开转场。在执行此操作之前,必须将所需的操作添加到第一个和第二个视图控制器。


下面是 3 个视图控制器的代码。我的修复 -我使用一个称为标志的全局布尔值,该标志在展开之前unwindCheck设置,但否则是。如果它是第二个视图控制器。即在放松期间隐藏。truefalsetrueself.view.hidden = trueviewWillAppear
请注意,我还在第三个视图控制器上添加了第二个按钮 - 它调用相同的展开转场 - 其标识符属性设置为"UnwindToFirstSegue"。第二个按钮不是这个可能的解决方案的必要部分。
class FirstViewController: UIViewController {
@IBAction func unwindToFirstViewController(segue: UIStoryboardSegue) {
}
override func viewDidLayoutSubviews() {
unwindCheck = false
}
}
class SecondViewController: UIViewController {
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
if unwindCheck == true {
self.view.hidden = true
}
}
@IBAction func unwindToSecondViewController(segue: UIStoryboardSegue) {
}
}
class ThirdViewController: UIViewController {
@IBAction func backToA(sender: AnyObject) {
performSegueWithIdentifier("UnwindToFirstSegue", sender: self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let identifier = segue.identifier{
switch identifier {
case "UnwindToFirstSegue":
unwindCheck = true
default:
break
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
可以通过在文档大纲中选择展开转场的标识符,然后转到属性检查器来设置它。
| 归档时间: |
|
| 查看次数: |
1120 次 |
| 最近记录: |