到目前为止,我还是无法想象如何在一个视图控制器中切换多个视图.我的故事板就像这样.
现在我想在我的视图控制器中嵌入两个视图.
我的分段控制代码到目前为止在一个视图控制器中切换两个视图.
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,并使用与上面答案中建议的隐藏属性相同的方法.
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中命名.
首先创建两个出口并将软管连接到您的视图中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 101
和102
),您可以这样做:
@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)