为什么导航控制器访问故事板中的视图?

时间:2017-03-11 14:02:12

标签: ios swift xcode macos

在有关如何使用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的实例?

1 个答案:

答案 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推送到导航堆栈,后退按钮和所有内容,而不使用故事板。