Swift – 分段控制 – 切换多个视图

到目前为止,我仍然无法确定如何在一个视图控制器中切换多个视图。 我的故事板是这样的。

在这里输入图像说明

现在我想在视图控制器中embedded两个视图。

在这里输入图像说明

我的代码分段控制到目前为止在一个视图控制器中切换两个视图。

import UIKit class PopularHistoryViewController: UIViewController { @IBOutlet weak var segmentedControl: UISegmentedControl! @IBAction func indexChanged(sender: UISegmentedControl) { switch segmentedControl.selectedSegmentIndex { case 0: NSLog("Popular selected") //show popular view case 1: NSLog("History selected") //show history view default: break; } } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } } 

另一件事,如果我把两个视图放在我的控制器里,区分它的最佳实践是什么?

请指教。 谢谢。

您可以使用UIViewisHidden属性来显示/隐藏所需的视图。 首先,您必须通过“接口”构build器将两个视图链接到IBOutlets

 @IBOutlet weak var historyView: UIView! @IBOutlet weak var popularView: UIView! @IBAction func indexChanged(_ sender: UISegmentedControl) { switch segmentedControl.selectedSegmentIndex { case 0: historyView.isHidden = true popularView.isHidden = false case 1: historyView.isHidden = false popularView.isHidden = true default: break; } } 

注意:它被hidden在Swift 1和2中。

如果你想在Xcode中为两个重叠的子视图做UI布局,更好的解决scheme是使用两个UIContainerViewController,并使用上面的答案中build议的隐藏属性设置相同的方法。

在这里输入图像说明

首先创build两个sockets,并将软pipe连接到ViewController的视图。

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

并更改代码,如:

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

如果你不想创build奥特莱斯,分配意见个人标签(说101102 ),你可以这样做:

 @IBAction func indexChanged(sender: UISegmentedControl) { switch segmentedControl.selectedSegmentIndex { case 0: self.view.viewWithTag(101)?.hidden = false self.view.viewWithTag(102)?.hidden = true case 1: self.view.viewWithTag(101)?.hidden = true self.view.viewWithTag(102)?.hidden = false default: break; } } 

将两个视图都添加到故事板中的视图控制器,并将其中的一个设置为hidden = yes或alpha = 0。当您的索引更改函数被调用时,将屏幕上的当前视图设置为hidden = yes / alpha of 0并设置以前隐藏视图隐藏=否/阿尔法= 1.这应该达到你想要的。

@IBAction func acSegmentAction(_ sender:Any){

  switch acSegmentedControl.selectedSegmentIndex { case 0: // print("addressview selected") addressView.isHidden = false contactProviderView.isHidden = true case 1: //print("contact provider selected") addressView.isHidden = true contactProviderView.isHidden = false default: break; } } 

XCODE 8.3.2更新

这里是xcode 8.3.2的更新语法

容器视图function作为小视图控制器。