UISegmented 控件子视图未出现
UISegmented Control subviews not appearing
我正在尝试使用 UISegmentedControl 在三个视图之间切换。我在主 viewcontroller 上的容器视图中有第一个视图。然后我在单独的 viewcontroller 上创建了另外两个视图。我在主 viewcontroller 的容器中为这两个视图编写了子视图。
我遇到的问题是,当我切换分段控件时,后两个视图不会显示。该段更改了容器并隐藏了第一个视图,但没有出现后两个视图。
当我通过 .xib 文件创建第二个两个视图时,我能够使用此方法。问题是现在我将它们作为故事板上的 viewcontrollers。
代码如下:
@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)
}
您应该尝试下面的代码。
@IBOutlet var segment: UISegmentedControl!
@IBOutlet var segmentView: UIView!
var viewOne: UIView!
var viewTwo: UIView!
var viewThree: UIView!
@IBAction func segmentChange(_ sender: Any) {
switch(segment.selectedSegmentIndex) {
case 0:
segmentView.bringSubviewToFront(viewOne)
break
case 1:
segmentView.bringSubviewToFront(viewTwo)
break
case 2:
segmentView.bringSubviewToFront(viewThree)
break
default:
segmentView.bringSubviewToFront(viewOne)
break
}
}
override func viewDidLoad() {
super.viewDidLoad()
viewOne = DetailView().view
segmentView.addSubview(viewOne)
viewTwo = ShowtimesView().view
segmentView.addSubview(viewTwo)
viewThree = ReviewsView().view
segmentView.addSubview(viewThree)
segmentView.bringSubviewToFront(viewOne)
}
问题是你在说 ShowtimesView().view
这样的话。那不是如何从故事板加载视图控制器!您需要与故事板对话并实例化视图控制器。
然而,即便如此,你所做的也是完全错误的。您不能使用视图控制器 "dumpster-dive" 来查看它的视图和随意查看您的界面的东西。您必须将自己变成一个自定义 parent 视图控制器,并将另一个视图控制器设为您的 child。有个正式的舞你要跳,你又不跳
我通过为原始 viewcontroller 中的每个子视图 viewcontroller 创建一个容器来解决这个问题。我还确保将正确的名称添加到他们的故事板 ID 中,而不仅仅是他们的 类.
这是工作代码:
@IBOutlet var segment: UISegmentedControl!
@IBOutlet var detailsView: UIView!
@IBOutlet var showtimeView: UIView!
@IBOutlet var reviewView: UIView!
var viewTwo: UIView!
var viewThree: UIView!
@IBAction func segmentChange(_ sender: Any) {
switch(segment.selectedSegmentIndex) {
case 0:
detailsView.isHidden = false
showtimeView.isHidden = true
reviewView.isHidden = true
break
case 1:
detailsView.isHidden = true
showtimeView.isHidden = false
reviewView.isHidden = true
break
case 2:
detailsView.isHidden = true
showtimeView.isHidden = true
reviewView.isHidden = false
break
default:
detailsView.isHidden = false
showtimeView.isHidden = true
reviewView.isHidden = true
break
}
}
override func viewDidLoad() {
super.viewDidLoad()
viewTwo = ShowtimesView().view
showtimeView.addSubview(viewTwo)
viewThree = ReviewsView().view
reviewView.addSubview(viewThree)
}
您需要从情节提要中为初始化视图控制器编写代码,例如:
override func viewDidLoad() {
super.viewDidLoad()
viewTwo = (UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ShowtimesView") as! ShowtimesView).view
segmentView.addSubview(viewTwo)
viewThree = (UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ReviewsView") as! ReviewsView).view
segmentView.addSubview(viewThree)
}
1 "Main" 是您的故事板名称
2 "ShowtimesView" 是这样的故事板 ID:
我正在尝试使用 UISegmentedControl 在三个视图之间切换。我在主 viewcontroller 上的容器视图中有第一个视图。然后我在单独的 viewcontroller 上创建了另外两个视图。我在主 viewcontroller 的容器中为这两个视图编写了子视图。
我遇到的问题是,当我切换分段控件时,后两个视图不会显示。该段更改了容器并隐藏了第一个视图,但没有出现后两个视图。
当我通过 .xib 文件创建第二个两个视图时,我能够使用此方法。问题是现在我将它们作为故事板上的 viewcontrollers。
代码如下:
@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)
}
您应该尝试下面的代码。
@IBOutlet var segment: UISegmentedControl!
@IBOutlet var segmentView: UIView!
var viewOne: UIView!
var viewTwo: UIView!
var viewThree: UIView!
@IBAction func segmentChange(_ sender: Any) {
switch(segment.selectedSegmentIndex) {
case 0:
segmentView.bringSubviewToFront(viewOne)
break
case 1:
segmentView.bringSubviewToFront(viewTwo)
break
case 2:
segmentView.bringSubviewToFront(viewThree)
break
default:
segmentView.bringSubviewToFront(viewOne)
break
}
}
override func viewDidLoad() {
super.viewDidLoad()
viewOne = DetailView().view
segmentView.addSubview(viewOne)
viewTwo = ShowtimesView().view
segmentView.addSubview(viewTwo)
viewThree = ReviewsView().view
segmentView.addSubview(viewThree)
segmentView.bringSubviewToFront(viewOne)
}
问题是你在说 ShowtimesView().view
这样的话。那不是如何从故事板加载视图控制器!您需要与故事板对话并实例化视图控制器。
然而,即便如此,你所做的也是完全错误的。您不能使用视图控制器 "dumpster-dive" 来查看它的视图和随意查看您的界面的东西。您必须将自己变成一个自定义 parent 视图控制器,并将另一个视图控制器设为您的 child。有个正式的舞你要跳,你又不跳
我通过为原始 viewcontroller 中的每个子视图 viewcontroller 创建一个容器来解决这个问题。我还确保将正确的名称添加到他们的故事板 ID 中,而不仅仅是他们的 类.
这是工作代码:
@IBOutlet var segment: UISegmentedControl!
@IBOutlet var detailsView: UIView!
@IBOutlet var showtimeView: UIView!
@IBOutlet var reviewView: UIView!
var viewTwo: UIView!
var viewThree: UIView!
@IBAction func segmentChange(_ sender: Any) {
switch(segment.selectedSegmentIndex) {
case 0:
detailsView.isHidden = false
showtimeView.isHidden = true
reviewView.isHidden = true
break
case 1:
detailsView.isHidden = true
showtimeView.isHidden = false
reviewView.isHidden = true
break
case 2:
detailsView.isHidden = true
showtimeView.isHidden = true
reviewView.isHidden = false
break
default:
detailsView.isHidden = false
showtimeView.isHidden = true
reviewView.isHidden = true
break
}
}
override func viewDidLoad() {
super.viewDidLoad()
viewTwo = ShowtimesView().view
showtimeView.addSubview(viewTwo)
viewThree = ReviewsView().view
reviewView.addSubview(viewThree)
}
您需要从情节提要中为初始化视图控制器编写代码,例如:
override func viewDidLoad() {
super.viewDidLoad()
viewTwo = (UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ShowtimesView") as! ShowtimesView).view
segmentView.addSubview(viewTwo)
viewThree = (UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ReviewsView") as! ReviewsView).view
segmentView.addSubview(viewThree)
}
1 "Main" 是您的故事板名称
2 "ShowtimesView" 是这样的故事板 ID: