gpt4 book ai didi

ios - Unwind segue - 返回多个 View

转载 作者:搜寻专家 更新时间:2023-10-30 21:59:34 27 4
gpt4 key购买 nike

假设我有 3 个 ViewControllers - A、B 和 C。A 显示 B,B 显示 C。然后我想返回到 A,而不通过(视觉上)B(如主页按钮)。我目前的问题是,当我放松到 A 时,会在短时间内显示 B(调用 viewWillAppear 等方法)。我该如何解决这个问题?

注意 1:与我的真实应用程序导航树相比,上面的示例已高度简化,并且对我来说,使用 NavigationController 作为所有 A、B 和 C 的容器是不可能的(或者至少是不可取的)。很少有原因是在过渡过程中,所有 View 中都有复杂的嵌入转场和不同的自定义过渡(几乎所有动画过渡都完全不同)。

注意 2:我发现了一些伪解决方案,定义了自定义转场并将其用作自定义展开转场。这也是不可取的,因为我想使用我已经完成的过渡动画师。

非常感谢任何帮助。

最佳答案

请注意,这是一个修改后的答案 - 回应下面的第一条评论。

我有一个似乎可行的解决方案。但它可能不合适。我不确定,仅供引用。

3 个 View Controller 按照问题中的描述设置(第二个是红色的,以便我注意到它在展开期间是否可见)。

enter image description here

通过拖动到 Exit,在第三个 View Controller (C) 中创建展开转场。在执行此操作之前,必须将所需的操作添加到第一个和第二个 View Controller 。

enter image description here

enter image description here

下面是 3 个 View Controller 的代码。我的修复 - 我使用一个名为 unwindCheck 的全局 bool 值作为标志,该标志在展开之前设置为 true,否则为 false。如果它是 true,那么第二个 View Controller 的 viewWillAppear 中的 self.view.hidden = true。即在放松期间隐藏。

请注意,我还在第三个 View Controller 上添加了第二个按钮 - 它调用相同的展开转场 - 其标识符属性设置为 "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
}
}
}
}

展开 segue 的标识符可以通过在文档大纲中选择它然后转到属性检查器来设置。

关于ios - Unwind segue - 返回多个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30621937/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com