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

Moh*_*din 49 ios swift xcode6

到目前为止,我还是无法想象如何在一个视图控制器中切换多个视图.我的故事板就像这样.

在此输入图像描述

现在我想在我的视图控制器中嵌入两个视图.

在此输入图像描述

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

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.
    }


}
Run Code Online (Sandbox Code Playgroud)

另外,如果我在控制器中放置两个视图,区分它的最佳做法是什么?

请指教.谢谢.

小智 49

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

在此输入图像描述

  • 看起来很有趣 你能发一些代码吗?谢谢 (2认同)
  • 这是一个示例项目:https://github.com/datomnurdin/com.revivalx.container (2认同)

rak*_*hbs 41

您可以使用该isHidden属性UIView来显示/隐藏您所需的视图.首先,您必须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;
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:它hidden在Swift 1和2中命名.

  • 需要在每个案例末尾添加中断 (2认同)

Mid*_* MP 6

首先创建两个出口并将软管连接到您的视图中ViewController.

@IBOutlet weak var firstView: UIView!
@IBOutlet weak var secondView: UIView!
Run Code Online (Sandbox Code Playgroud)

并更改代码,如:

@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; 
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您不想创建Outlets,请为各个标记分配视图(Say 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; 
    }
}
Run Code Online (Sandbox Code Playgroud)