gpt4 book ai didi

ios - 如何从选项卡栏 Controller 弹出或以模态方式呈现 View Controller ?

转载 作者:可可西里 更新时间:2023-11-01 01:57:36 25 4
gpt4 key购买 nike

如何创建在按下标签栏上的按钮时出现的弹出窗口?我想要类似这样的东西:https://www.youtube.com/watch?v=zDWSaItF2ko .

我尝试了很多解决方案,但没有一个奏效。

例如,我用我的主视图 Controller 试过这个:

虽然这仍然不起作用。我将如何着手创建它。我知道我需要在当前上下文中以模态方式呈现 View Controller ,但我该如何从标签栏 Controller 中做到这一点。

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
if viewController is PopupViewController {
if let popupView = tabBarController.storyboard?.instantiateInitialViewController() {
popupView.modalPresentationStyle = .fullScreen
tabBarController.present(popupView, animated: true, completion: nil)

return false
}
}
return true
}

下面是一些可能有帮助的图片:

主要 Storyboard:

Main Storyboard

弹出 Storyboard:

Popup Storyboard

查看 Controller 代码:

View Controller Code

最佳答案

您是否尝试过在 Xcode 中使用断点进行调试?据我所知,您要做的第一件事是检查应选择的 View Controller 是否属于 PopupViewController 类。您确定 View Controller 被正确实例化了吗?

顺便说一下,我会推荐另一种从 Storyboard实例化 View Controller 的方法,而不是:

tabBarController.storyboard?.instantiateInitialViewController()

第一件事是转到 Storyboard文件本身,在您尝试实例化的 View Controller 中,将 Storyboard ID 更改为 Storyboard的类(PopupViewController 在你的情况下)。

接下来,您将尝试使用 init(name: String, bundle storyboardBundleOrNil: Bundle?) initialiser 来实例化 Storyboard 本身:

let storyboard = UIStoryboard(name: "Popup", bundle: nil)

现在使用 storyboard 变量实例化 View Controller ,如下所示:

let popupViewController  = storyboard.instantiateViewController(withIdentifier: "PopupViewController") as! PopupViewController

最后你可以给它一些额外的配置并在标签栏 Controller 上显示它:

popupViewController.modalPresentationStyle = .fullScreen
tabBarController.present(popupViewController, animated: true)

编辑

此外,为了让它更敏捷,我建议使用 guard 语句来提前退出。最后,该方法可能看起来像这样:

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
guard viewController is PopupViewController else { return true }
let storyboard = UIStoryboard(name: "Popup", bundle: nil)
let popupViewController = storyboard.instantiateViewController(withIdentifier: "PopupViewController") as! PopupViewController
popupViewController.modalPresentationStyle = .fullScreen
tabBarController.present(popupViewController, animated: true, completion: nil)
return false
}

关于ios - 如何从选项卡栏 Controller 弹出或以模态方式呈现 View Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50471430/

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