【发布时间】:2018-10-24 04:20:31
【问题描述】:
我正在尝试使用 UISegmentedControl 在三个视图之间切换。我在主视图控制器的容器视图中有第一个视图。然后我在不同的视图控制器上创建了另外两个视图。我在主视图控制器的容器中为这两个视图编写了子视图。
我遇到的问题是,当我切换分段控件时,后两个视图不会显示。该段更改了容器并隐藏了第一个视图,但后两个没有出现。
当我通过 .xib 文件创建后两个视图时,我能够使用此方法。问题是现在我将它们作为情节提要上的视图控制器。
代码如下:
@IBOutlet var segment: UISegmentedControl!
@IBOutlet var detailsView: UIView!
@IBOutlet var segmentView: UIView!
var viewTwo: UIView!
var viewThree: UIView!
@IBAction func segmentChange(_ sender: Any) {
switch(segment.selectedSegmentIndex) {
case 0:
detailsView.isHidden = false
segmentView.isHidden = true
break
case 1:
detailsView.isHidden = true
segmentView.isHidden = false
segmentView.bringSubviewToFront(viewTwo)
break
case 2:
detailsView.isHidden = true
segmentView.isHidden = false
segmentView.bringSubviewToFront(viewThree)
break
default:
detailsView.isHidden = false
segmentView.isHidden = true
break
}
}
override func viewDidLoad() {
super.viewDidLoad()
viewTwo = ShowtimesView().view
segmentView.addSubview(viewTwo)
viewThree = ReviewsView().view
segmentView.addSubview(viewThree)
}
【问题讨论】:
-
ShowtimesView 和 ReviewView 是视图控制器,它不是使用故事板或 xib 初始化的,它的视图是空的,所以它不显示。请在 viewDidLoad 更改 viewTwo 和 viewThree 的 bg 颜色后检查
-
当两个子视图视图控制器是 .xib 文件时,此代码工作得非常好。只有当视图控制器与 stroyboard 而不是 .xib 文件分开时,我才会遇到这个问题。我不确定为什么,因为所有代码都完全相同。唯一的区别是故事板与 .xib 文件。
-
如何在 xib 中初始化视图控制器?你在 ShowtimesView 的 init 方法中做了什么代码吗?您的代码不是从 stotyboard 或 xib 初始化 viewController 只是使用默认视图属性创建了 ViewController 的实例。
-
不需要使用 init 和 swift 4。上面的代码在我的控制器是 .xib 时有效
标签: ios swift uiview uisegmentedcontrol