在我的自定义TabBarController中,我为每个选项卡设置了NavigationController。
let viewController = [HomeViewController(), ProfileViewController()]
let navControllers = viewControllers.map { return UINavigationController(rootViewController: $0) }
setViewControllers(navControllers, animated: false)
在我的HomeViewController中,我有一个CollectionView,当选中其中一个单元格时,它会将我的VideoPlayerViewController推到导航控制器中。然后,VideoPlayerViewController以模态方式呈现了一个ViewController:
class PopoverViewController: UIViewController {
@IBAction func presentPopover() {
let popoverViewController = PopoverViewController()
popoverViewController.modalPresentationStyle = .fullScreen
popoverViewController.delegate = self
present(popoverViewController, animated: true, completion: nil)
}
}
在我的PopoverViewController中,我有一个关闭按钮,它调用了VideoPlayerViewController中的委托方法。
class PopoverViewController: UIViewController {
@objc func closeTapped() {
delegate?.willClose(self)
}
}
extension VideoPlayerViewController: PopoverViewControllerDelegate {
func willClose(_ viewController: PopoverViewController) {
viewController.dismiss(animated: true, completion: nil)
}
}
在我的 PopoverViewController 上调用 dismiss 函数时,不仅会关闭模态 ViewController,还会从 NavigationController 弹出 VideoPlayerViewController 并返回到 rootViewController(HomeViewController)。
我想要回到 VideoPlayerViewController,并只关闭 PopoverViewController 而不是弹出 VideoPlayerViewController。
closeTapped
中关闭PopoverViewController
。顺便问一下,当选择一个单元格时,你是使用present还是push来展示VideoPlayerViewController
? - mahanVideoPlayerViewController
推送到我的NavigationController
。我尝试在closeTapped
中直接关闭PopoverViewController
,但仍然得到相同的结果。 - Giorgio DoganieroPopoverViewController.modalPresentationStyle = .fullScreen
,其中大写的 P,这是错误还是你将其设置在类上而不是实例上? - Jakub Skořepa