gpt4 book ai didi

ios - 关闭呈现的 VC 时呈现 View Controller 会丢失 subview

转载 作者:行者123 更新时间:2023-12-01 17:49:51 25 4
gpt4 key购买 nike

我在玩两个以直接方式交互的 View Controller 时遇到了一些麻烦:

homeViewController 显示一个待办事项列表,带有一个 addTask 按钮。
addTask 按钮将启动一个额外的 viewController,它充当用户填写的“表单”。

然而,在调用

 self.dismissViewControllerAnimated(true, completion: nil);

里面 呈现 View Controller 我回到我的主页,但它是空白的,除了可以看到 Storyboard 上的最高级别 View (即覆盖整个屏幕的 View )之外,似乎什么都看不到。

我所有的 View 、场景等都在 Storyboard 中设置了自动布局。我在 Stack Overflow 上环顾四周,这导致我玩弄自动调整大小的 subview 参数,即:
self.view.autoresizesSubviews = false;

无济于事。我要么修复了错误的自动调整大小参数(在错误的兴趣 View 中,或者只是将其设置错误),或者有其他问题。

提前致谢

编辑:

我将VC介绍如下:
    func initAddNewTaskController(){
let addNewTaskVC = self.storyboard?.instantiateViewControllerWithIdentifier("AddNewTaskViewController") as! AddNewTaskViewController;
self.presentViewController(addNewTaskVC, animated: true, completion: nil);
}

编辑2:

虽然我接受使用委托(delegate)或展开 segue 确实可以规避我遇到的问题(正如 campbell_souped 所建议的那样),但当我关闭导致空白屏幕的 View Controller 时,我仍然不明白从根本上发生了什么。

我知道调用dismissViewControllerAnimated 被传递到呈现 View Controller (在这种情况下是我的homeViewController)。由于我不需要进行任何解雇前或解雇后的配置,因此(在我看来)这里不需要使用委托(delegate)。

我目前的想法是,由于某种原因,当我调用
dismissViewControllerAnimated(true, completion:nil);

在我的 addNewTaskViewController 中,它实际上是在释放我的 homeViewController。我希望有人能启发我关于我不了解 View Controller 是如何呈现/关闭的究竟是什么。

最佳答案

在这种情况下,我通常采取两条路线之一。在 AddNewTaskViewController 上设置代表,或使用展开转场。

使用委托(delegate)方法,设置协议(protocol):

protocol AddNewTaskViewControllerDelegate {
func didDismissNewTaskViewControllerWithSuccess(success: Bool)
}

在您的 AddNewTaskViewController 中添加一个代表委托(delegate)的可选属性
var delegate: AddNewTaskViewControllerDelegate?

然后调用 didDismissNewTaskViewControllerWithSuccess每当你要解雇 AddNewTaskViewController :

如果记录添加成功:
self.delegate?.didDismissNewTaskViewControllerWithSuccess(true)
self.dismissViewControllerAnimated(true, completion: nil);

或者如果有取消/失败:
self.delegate?.didDismissNewTaskViewControllerWithSuccess(false)
self.dismissViewControllerAnimated(true, completion: nil);

最后,将自己设置为代表,修改之前的代码段:
func initAddNewTaskController(){
let addNewTaskVC = self.storyboard?.instantiateViewControllerWithIdentifier("AddNewTaskViewController") as! AddNewTaskViewController;
self.presentViewController(addNewTaskVC, animated: true, completion: nil);
}

对此:
    func initAddNewTaskController() {
guard let addNewTaskVC = self.storyboard?.instantiateViewControllerWithIdentifier("AddNewTaskViewController") as AddNewTaskViewController else { return }
addNewTaskVC.delegate = self
self.presentViewController(addNewTaskVC, animated: true, completion: nil);
}

...
}

// MARK: AddNewTaskViewControllerDelegate
extension homeViewController: AddNewTaskViewControllerDelegate {

func didDismissNewTaskViewControllerWithSuccess(success: Bool) {
if success {
self.tableView.reloadData()
}
}

}

[ 分机在您的 homeViewController 之外的地方类(class) ]

使用 unwind segue 方法,看看这个 Ray Wenderlich 示例:
http://www.raywenderlich.com/113394/storyboards-tutorial-in-ios-9-part-2

这种方法涉及从 IBAction 按住 Ctrl 键拖动到 View Controller 上方的退出对象,然后从弹出菜单中选择正确的操作名称

关于ios - 关闭呈现的 VC 时呈现 View Controller 会丢失 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34566799/

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