【问题标题】:Swift: present view controller in same context as other view controllers?Swift:在与其他视图控制器相同的上下文中呈现视图控制器?
【发布时间】:2017-12-17 14:13:15
【问题描述】:

好的,我有一个问题,我无法理解尝试从整个选项卡栏控制器 VC 呈现视图控制器(每次都相同的实例,就像其他选项卡项 VC)。我的标签栏控制器 VC 有 3 个视图控制器,它通过情节提要连接到,因此标签栏上出现了 3 个标签栏项目。当selectedIndex 更改时,这些视图控制器会出现在 Tab Bar Controller VC 的子视图下方。

这些应该始终在顶部的子视图是顶部的导航栏和底部的标签栏:

这对于这 3 个视图控制器来说非常有用。问题是我需要通过导航栏中的按钮访问未显示在标签栏按钮中的 ANOTHER 视图控制器的 1 个实例。

我的问题是不管怎么呈现,这个VC总是弹出到tab bar controller VC上面,覆盖tab bar和nav bar。

这里我确保只创建了 1 个实例:

if podcastVC == nil {
            //print("IT IS NIL")
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            podcastVC = storyboard.instantiateViewController(withIdentifier: "podcast") as! PodcastViewController

            //*NOTE: have to set other vars too, this is temp
            podcastVC.urlStr = currentTrackUrl!
            podcastVC.originalUrl = currentTrackUrl!
            AudioPlayerManager.shared.play(urlString: podcastVC.urlStr)
        }

        self.show(podcastVC, sender: self)
        podcastVC.modalPresentationStyle = .currentContext
        podcastVC.definesPresentationContext = false


  [1]: https://i.stack.imgur.com/1d6MZ.png

Swift: How to return to the same instance of my UIViewController所示

如何使该 VC 出现在与标签栏项目相同的上下文中?我尝试将导航栏的图层设置为更高的 z 位置(如 10),但没有任何效果。怎么了?

【问题讨论】:

  • 呈现的ViewController覆盖了整个屏幕。
  • 好吧。那么如何在不覆盖屏幕的相同上下文中显示它呢?
  • 您是否尝试使用show 而不是present。它只是工作
  • 你在说什么看上面我正在使用的节目,它把它呈现在所有东西上
  • 糟糕!据我了解,您想从您的TabBarControllerviewControllers 中呈现实例化的ViewController,对吗?

标签: ios swift swift3 uiviewcontroller uitabbarcontroller


【解决方案1】:

模态视图: 适用于所有视图控制器 位于所有其他视图之上,需要以编程方式弹出(例如,手动添加一个按钮)

推送视图: 仅适用于导航控制器 在 navigationController 中自动添加后退按钮

你应该推动 VC,它会保留 tabbar 和 nav 您可以更改模态呈现样式

【讨论】:

  • 有没有没有后退按钮的推送方式?我过去曾尝试将其删除,但没有成功
猜你喜欢
  • 2015-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-18
  • 1970-01-01
  • 2013-01-12
  • 1970-01-01
相关资源
最近更新 更多