gpt4 book ai didi

ios - 在模态视图 Controller 后面更改 View Controller

转载 作者:行者123 更新时间:2023-11-28 06:46:32 25 4
gpt4 key购买 nike

我想为联系人应用程序创建类似于完成/编辑页面的东西。模态视图背后的 View 似乎发生了变化,但我不确定它是如何产生这种行为的。

这是我到目前为止所看到的内容:

iOS: Switch view controller behind current modal view controller?这篇文章似乎有一个正确的答案。但是,我不确定他所说的使 Root View Controller 成为模态视图的委托(delegate) 是什么意思,以及调用委托(delegate)方法 是什么意思。

这是我想要完成的:

想象一个嵌入导航 Controller 的 vc1。我在 vc1 上点击一个按钮,这会导致 vc2 以模态方式呈现。当您在 vc2 上按“完成”时,它会关闭模态视图 vc2,并显示 vc3。当您点击 vc3 上的后退按钮时,它会返回到 vc1。

这是当前的行为:

我可以让 vc2 以模态方式显示在 vc1 之上。但是当在 vc2 上按下“完成”按钮时,它只是返回到 vc1 而不是转到 vc3 然后,当点击“返回”时,转到 vc1。

这是我已经尝试过的:

我尝试在没有动画的情况下从 vc1 转到 vc3,然后模态地转到 v2。这种工作方式非常丑陋,它会导致显示此 Presenting view controllers on detached view controllers is discouraged 错误。此外,我尝试了 unwindToSegue 方法的不同组合,但我也无法弄清楚。

任何帮助将不胜感激!非常感谢您的宝贵时间:)

最佳答案

通过在 vc1 中创建协议(protocol)并将其作为模态视图 Controller 的属性,您可以使 Root View Controller (vc1) 成为模态视图 Controller 的委托(delegate)。当您关闭模态视图 Controller 时,调用委托(delegate)方法之一。像这样的东西可能对你有用:

vc1:

protocol Vc1Delegate: class {
func pushToVc3()
}

class Vc1: UIViewController, Vc1Delegate
{
override func viewDidLoad() {
super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "Vc2Modal" {
if let _vc2 = segue.destinationViewController as? Vc2 {
_vc2.delegate = self
}
}
}

@IBAction func showVc2Modal() {
performSegueWithIdentifier("Vc2Modal", sender: nil)
}

// MARK: Vc1Delegate

func pushToVc3() {
performSegueWithIdentifier("Vc3PushWithoutAnimation", sender: nil)
}
}

VC2:

class Vc2: UIViewController
{
weak var delegate: Vc1Delegate?

override func viewDidLoad() {
super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}

@IBAction func dismiss() {
delegate?.pushToVc3()
dismissViewControllerAnimated(true, completion: nil)
}
}

关于ios - 在模态视图 Controller 后面更改 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36194670/

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