如何创建按Tab键上的按钮时显示的弹出窗口?我想要类似的东西:https://www.youtube.com/watch?v=zDWSaItF2ko。
我尝试了很多解决方案,但都没有。
例如,我已经使用我的主视图控制器尝试了这个:
但这仍然不起作用。我将如何创建这个。我知道我需要以模态方式和当前上下文呈现视图控制器,但是如何从标签栏控制器中执行此操作。
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
}
以下是一些可能有用的图片:
主要故事板:
弹出式故事板:
查看控制器代码:
答案 0 :(得分:1)
您是否尝试使用Xcode中的断点进行调试?从我所看到的,你要做的第一件事是检查应该选择的视图控制器是否属于类PopupViewController
。您确定正在实例化视图控制器吗?
顺便说一句,我会推荐另一种从故事板中实例化视图控制器的方法,而不是:
tabBarController.storyboard?.instantiateInitialViewController()
第一件事是转到故事板文件本身,在视图控制器中,您尝试实例化将Storyboard ID
更改为某些内容,例如故事板的类(PopupViewController
在您的情况下)。
接下来,您将尝试使用init(name: String, bundle storyboardBundleOrNil: Bundle?)
初始化程序尝试实例化故事板本身:
let storyboard = UIStoryboard(name: "Popup", bundle: nil)
现在使用storyboard
变量实例化视图控制器,如下所示:
let popupViewController = storyboard.instantiateViewController(withIdentifier: "PopupViewController") as! PopupViewController
最后,您可以给它一些额外的配置并将其显示在标签栏控制器上:
popupViewController.modalPresentationStyle = .fullScreen
tabBarController.present(popupViewController, animated: true)
修改强>
为了使其更加 Swifty ,我建议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
}