在有关如何使用SegmentControllers,TabBarControllers等的各种教程中,它被配置为使得表示视图的变量从故事板的实例化中获取其值:
private lazy var summaryViewController: SummaryViewController = {
// Load Storyboard
let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
// Instantiate View Controller
var viewController = storyboard.instantiateViewController(withIdentifier: "SummaryViewController") as! SummaryViewController
// Add View Controller as Child View Controller
self.add(asChildViewController: viewController)
return viewController
}()
为什么这段代码不只是获取SummaryViewController的实例?
答案 0 :(得分:1)
从故事板中添加VC的实例,添加您在故事板中添加的所有逻辑和插座。让我们说你有以下(显然很简单)VC:
class MyVC : UIViewController {
func viewDidLoad() {
}
@IBAction buttonPressed(sender : UIButton) {
/// Do something
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "mySegue"{
var vc = segue.destinationViewController as! WhateverViewController
}
}
}
其中buttonPressed:func连接到IB中的按钮,并且您还有一个带有' mySegue'的segue。标识符。从故事板初始化VC可让您访问所有这些内容。您绝对可以在不使用故事板的情况下实例化和推送VC,但是当您推送的VC已连接IBOutlets,IBActions等时,您不应该这样做。如果您想在代码中执行此操作,请尝试以下内容:
let myNewVC = PushedViewController()
self.navigationController?.pushViewController(myNewVC, animated : true)
这会将myNewVC推送到导航堆栈,后退按钮和所有内容,而不使用故事板。