如何通过Swift中另一个UIViewController的容器覆盖父UIViewController的UI元素?

时间:2016-03-09 20:15:55

标签: ios swift uiviewcontroller

我不确定这在技术上是否可行,但我会试一试。

我正在编写一个应用程序并在一个UIViewController上我决定放置两个容器,每个容器都嵌入(不同)UIViewController。当用户打开应用程序时,第一个容器是可见的,另一个容器是隐藏的,用户可以使用分段控件在它们之间切换:

enter image description here

此分段控件始终位于顶部,因为用户可以随时更改面板。

但这里有一个问题。第一个容器包含UIViewController,我也有嵌入式容器UIViewController,默认情况下隐藏。有一个按钮会将hidden属性更改为false,然后最后一个UIViewController变为可见 - 我想在全屏显示它,但现在可以看到来自父UIViewController的分段控件。有没有办法掩盖/隐藏它?

部分代码如下:

具有分段控件的父视图:

@IBOutlet weak var firstView: UIView!   
@IBOutlet weak var secondView: UIView!
@IBOutlet weak var segmentedControl: UISegmentedControl!

@IBAction func indexChanged(sender: UISegmentedControl) {
    switch segmentedControl.selectedSegmentIndex {
    case 0:
        firstView.hidden = true
        secondView.hidden = false
    case 1:
        firstView.hidden = false
        secondView.hidden = true
    default:
        break;
    }

}

然后是隐藏容器的第一个面板:

@IBOutlet weak var fullScreenComponent: UIView!

override func viewDidLoad() {
    super.viewDidLoad()
    fullScreenComponent.hidden = true
}

func tapShowView() { //gets called on a button click

    fullScreenComponent.hidden = false

}
}

然后fullScreenComponent只是一个嵌入式UIViewController的常规容器,带有一些标签和按钮:

class FullScreenComponent: UIViewController{
...

如何在向用户呈现全屏组件的同时避免显示分段控件?

1 个答案:

答案 0 :(得分:0)

您可以在调用tapShowView()函数时发布通知,该函数由具有分段控件的父视图订阅。

例如,在带有分段控件的父视图中添加如下内容:

override func viewDidLoad(){
    NSNotificationCenter.defaultCenter().addObserver(self,selector: "toggleSegmentedControl",name: "fullScreenTapped",object: nil)
}

func toggleSegmentedControl(){
    self.segmentedControl.hidden = !self.segmentedControl.hidden
}

deinit {
    NSNotificationCenter.defaultCenter.removeObserver(self)
}

然后在fullScreenComponent中将tapShowView更改为:

func tapShowView() { //gets called on a button click

    fullScreenComponent.hidden = false
    NSNotificationCenter.defaultCenter().postNotificationName("fullScreenTapped", object:nil)
}

当您退出全屏模式时,您还需要发布另一个通知。