gpt4 book ai didi

ios - UIModalPresentationStyle.CurrentContext Swift iOS 7

转载 作者:IT王子 更新时间:2023-10-29 05:31:22 29 4
gpt4 key购买 nike

我想在另一个 View 上显示一个 View - PresentedView - Background View 使用 iOS 7。在我的应用程序中,我正在使用 UITabBArController ,所以在运行时我不知道哪个 View 将是背景 View (可能是任何选项卡栏项目)。结构如下:

UITabBarController
---> TabItem1 - FirstUIViewController
---> TabItem2 - SecondUIViewController
---> TabItem3 - ThirdUIViewController

需要这样的东西:

enter image description here

应用加载时,我在 TabItem1 - FirstUIViewController 上。当我点击 TabItem3 时,我希望 ThirdUIViewController 出现在 FirstUIViewController 的顶部,并且“FirstUIViewController”应该出现在后台且没有启用用户交互。

到目前为止我做了什么:

  1. 由于 UIViewControllers 被添加为 Relationship Controllers 以在 `UITabBarController 中显示为 TabBar Item,我从 tabbarcontroller 添加了一个 segue到 ThridViewController。

  2. 将此 Segue 的 PresentationStyle 更改为 UIModalPresentationStyle.CurrentContext 并做了以下修改

    func `viewDidLoad()` {
    super.viewDidLoad()
    self.performSegue("identifier", sender: self)
    }

没有任何反应,我只看到白色背景的“ThridViewController”

  1. 我尝试了手动编码方法:

    func `viewDidLoad()` {
    super.viewDidLoad()
    let overlayController:UIThirdViewController = UIThirdViewController() //This controller has a view added on top of it, which covers top half screen only
    overlayController.modalPresentationStyle = UIModalPresentationStyle.CurrentContext
    self.presentViewController(overlayController, animated: true, completion: nil)
    }

没有变化。新 View 覆盖以前的 View 。如果我添加此 overlayController.view.backgroundColor = UIColor.clearColor(),我会看到一半屏幕黑色,一半包含我的新 View

问题点:

  1. 我应该在哪里编写代码来初始化/调用 ThirdViewController 以显示在当前 View 的顶部?
  2. 如何解决黑屏问题并使其在 iOS 7 上正常运行?

我正在使用 Xcode 7 并在 iOS7 上运行。请帮忙。工作代码片段将不胜感激。不要发布其他堆栈溢出帖子作为答案,除非代码有效并且您已经自己尝试过。

更新: - 使用这种方法,我得到一个黑屏

class TabBarViewController: UITabBarController, UITabBarControllerDelegate {

override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
}

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

let switchController:UIViewController = SwitchViewController()

self.presentingViewController?.modalPresentationStyle = UIModalPresentationStyle.CurrentContext
self.presentingViewController?.view.backgroundColor = UIColor.clearColor()
self.presentViewController(switchController, animated: true, completion: nil)
return false
}
}

最佳答案

您应该继承 UITabBarController 并将其行为添加到自定义子类中。将 UITabBarController 委托(delegate)设置为 self,然后在点击特定索引时而不是让它切换选项卡,您将以模态方式显示菜单。 UITabBarControllerDelegate 方法将为您提供这样做的机会。

特别是使用这个委托(delegate)方法....

- tabBarController:shouldSelectViewController:

您可以在为任何选项卡调用此菜单时显示菜单并返回 NO。这个选项卡只有你一个空白的 viewController,因为它永远不会显示给用户。

对于转换本身,我强烈建议使用 UIPresentationController 的子类来将容器 View 框架设置为比屏幕尺寸小一点,并添加一个“dimmingView”。这仅在 iOS8 上可用,所以如果你想要 iOS7,你将需要做更多 hackish 事情。

关于ios - UIModalPresentationStyle.CurrentContext Swift iOS 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32345288/

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