我不确定这在技术上是否可行,但我会试一试。
我正在编写一个应用程序并在一个UIViewController
上我决定放置两个容器,每个容器都嵌入(不同)UIViewController
。当用户打开应用程序时,第一个容器是可见的,另一个容器是隐藏的,用户可以使用分段控件在它们之间切换:
此分段控件始终位于顶部,因为用户可以随时更改面板。
但这里有一个问题。第一个容器包含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{
...
如何在向用户呈现全屏组件的同时避免显示分段控件?
答案 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)
}
当您退出全屏模式时,您还需要发布另一个通知。