gpt4 book ai didi

swift - UIViewController 作为另一个 UIViewController 的子类

转载 作者:行者123 更新时间:2023-11-30 10:41:45 30 4
gpt4 key购买 nike

enter image description here我的标签栏中有五个标签栏项目。第五项是弹出ViewController。因此,当我单击该按钮时,当前 Controller 中将显示一个弹出窗口。我使用 UIViewController 作为子类来实现此目的。

我的问题是,如果我在 FirstTabItem 中添加弹出 ViewController 并移至 SecondTabItem。然后,如果我再次单击 FirstTabItem,则弹出 ViewController 仅显示,当前 ViewController 被隐藏。这是我的代码。

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {

if let navigationController = viewController as? UINavigationController,
navigationController.viewControllers.contains(where: { $0 is MoreViewController }) {

let vc = MoreView(nibName: "MoreView", bundle: nil)
vc.modalPresentationStyle = .overCurrentContext
UIApplication.topViewController()?.present(vc, animated: true, completion: nil)

return false
} else {
return true
}
}

extension UIApplication {

class func topViewController(_ viewController: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
if let nav = viewController as? UINavigationController {
return topViewController(nav.visibleViewController)
}
if let tab = viewController as? UITabBarController {
if let selected = tab.selectedViewController {
return topViewController(selected)
}
}
if let presented = viewController?.presentedViewController {
return topViewController(presented)
}

return viewController
}

}

最佳答案

你有代码

UIApplication.topViewController()?.present ....

如果这是您想要关闭的 View Controller ,则必须从呈现的同一 View Controller 中关闭

UIApplication.topViewController()?.dismiss...

通常,您不会希望在此函数中执行所有代码 - 它应该只是返回 Bool,而不是更改 View 层次结构。

关于swift - UIViewController 作为另一个 UIViewController 的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56628650/

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