gpt4 book ai didi

ios - 带导航 Controller 的 3D Touch Peek/Pop

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

这个问题与我在here 的另一个问题有些相关

在 Apple 的示例代码中,我有以下用于 3D Touch Peek & Pop 的代码:

func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
guard let indexPath = tableView.indexPathForRow(at: location) else { return nil }

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let viewController = storyboard.instantiateViewController(withIdentifier: ChatDetailViewController.identifier)
guard let chatDetailViewController = viewController as? ChatDetailViewController else { return nil }

chatDetailViewController.chatItem = chatItem(at: indexPath)
let cellRect = tableView.rectForRow(at: indexPath)
previewingContext.sourceRect = previewingContext.sourceView.convert(cellRect, from: tableView)
chatDetailViewController.isReplyButtonHidden = true

let navigationController = UINavigationController(rootViewController: viewController
return navigationController
}

func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) {

self.navigationController!.show((viewControllerToCommit as! UINavigationController).viewControllers[0], sender: self)
}

因此,在 Peek 中,我将刚刚创建的 View Controller 包装在一个新的导航 Controller 中并自行返回:

let navigationController = UINavigationController(rootViewController: viewController
return navigationController

但是,在 Pop 中,我必须放弃上面创建的导航 Controller 并在我当前所在的导航 Controller 中“显示”它。

为什么这样?

我想在“Peek”中显示一个顶部栏(同样,如讨论的 here )。但是,如果我只提交新创建的同一个导航 Controller ,它会带走所有其他属性,例如后退按钮、自定义推送/弹出动画等。因此,当 View Controller 被“弹出”(提交)时,我必须提取它并将其放回我所在的当前导航 Controller 中。

问题

以上代码完美运行。但是,我要让我在 Peek 内部制作的导航 Controller 被泄露。此外,当我测试泄漏时,它会显示出小的内存泄漏。我将如何释放/取消分配我留在“Pop”中的导航 Controller ?

最佳答案

您所做的事情没有“泄漏”。

  • viewControllerForLocation 返回的 View Controller 在用户查看时由运行时保留,并在用户停止查看时释放。

  • commit 中显示的 View Controller 是普通显示的 View Controller ,并作为 View Controller 层次结构的一部分由运行时保留。当您以通常的方式从该 View Controller 中退出(关闭或弹出)时,它会被释放。

关于ios - 带导航 Controller 的 3D Touch Peek/Pop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42350910/

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