现在我有一个视图控制器,包含1个分段控件和2个UI视图.但我认为更新UI视图以进行增强以供将来编辑太复杂了.我正在使用隐藏方法.
import UIKit
class PopularHistoryViewController: UIViewController {
@IBOutlet weak var segmentedControl: UISegmentedControl!
@IBOutlet weak var popularView: UIView!
@IBOutlet weak var historyView: UIView!
@IBAction func indexChanged(sender: UISegmentedControl) {
switch segmentedControl.selectedSegmentIndex
{
case 0:
NSLog("Popular selected")
//show popular view
popularView.hidden = false
historyView.hidden = true
case 1:
NSLog("History selected")
//show history view
popularView.hidden = true
historyView.hidden = false
default:
break;
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}
Run Code Online (Sandbox Code Playgroud)
我想要的是1个包含2个控制器视图的容器视图,因此我可以使用分段控件来切换它们.

请指教.
Rob*_*Rob 28
另一种方法是一次只在内存中有一个子视图控制器,然后在分段控件中更改选定的值时,加载新的子视图控制器,在一个子视图控制器之间转换到下一个子视图控制器,然后删除旧子视图控制器:
let viewControllerIdentifiers = ["first", "second"] // storyboard identifiers for the child view controllers
@IBAction func didChangeValue(sender: UISegmentedControl) {
let newController = storyboard!.instantiateViewController(withIdentifier: viewControllerIdentifiers[sender.selectedSegmentIndex])
let oldController = childViewControllers.last!
oldController.willMove(toParentViewController: nil)
addChildViewController(newController)
newController.view.frame = oldController.view.frame
transition(from: oldController, to: newController, duration: 0.25, options: .transitionCrossDissolve, animations: {
// nothing needed here
}, completion: { _ -> Void in
oldController.removeFromParentViewController()
newController.didMove(toParentViewController: self)
})
}
Run Code Online (Sandbox Code Playgroud)
显然,这假设您已经在视图上已经有了第一个子视图控制器(如果您在Interface Builder中使用"容器视图"控件,则很容易完成)和UISegmentedControl匹配项的默认选定值.您还必须具有这两个子场景的故事板标识符.
对于Swift 2的演绎,请参阅此答案的上一版本.
不久前我广泛尝试这样做。由于某种原因,隐藏属性对我不起作用,并且容器视图似乎没有更新。我知道这不是理想的解决方案,但我最终创建了两个容器视图并使用分段控件来更改容器视图的 alpha。同样,虽然不理想,但效果很好。
| 归档时间: |
|
| 查看次数: |
20196 次 |
| 最近记录: |