StoryBoard 关于Segue ----prepareForSegue:sender: 理解

来源:互联网 发布:武汉软件培训 编辑:程序博客网 时间:2024/05/18 06:23

//用的swift语言写的,其实OC也是同样地道理理解。

    

    //一旦触发了相同IDsegue就会触发此方法。

    override func prepareForSegue(segue:UIStoryboardSegue, sender: AnyObject?) {

        

        if segue.identifier =="addSegueID" {

            

           //之前对这个方法,是只知其然不知其所以然,现在才明白了。第一,在SB当中,拖了一根segue线之后,只要是走了这个prepareForSegue方法,就相当于是给navigationControllerViewController创建了实例对象。现在我自己又在这个方法里创建了一个对象,显然这两个对象是不一样的。所以就会出现这样的错误。

           //有什么可以证明走了这个方法就是创建了实例了呢?

            //其实可以从segue.destinationController就可看出来,因为segue可以自己找到目的控制区,并且找的十分准确。

           //再加上,看API中的介绍,segue这个对象,已经包含了源控制其和目标控制器的信息了。所以可以充分证明以上说法。

           //个人观点,也不知道成立与否,segue destinationController属性应该属于计算属性,我们只需要拿来使用即可。并且他也是只读属性,本人已经验证过了。

            //另外需要补充一点知识:UINavigationController的父类是UIViewController,所以UINavigationController本身必然有一个根view,但是纵观之前所有用到UINavigationController的地方,我们都没有真正的看到过他的view,那么,他的view去哪了?

           //要认识到如果导航控制器没有根视图的话是不允许这种情况发生的。所以,每次,我们都是让导航的view指向了其他视图控制器的view,这样,就减少了内存的浪费。何谈此言?

           //因为,每次创建导航控制器,必然会创建一个根视图,如果你不把根视图指向其他的,必然会造成他本身的根视图占用空间,但是该空间我们并没有利用他,所以,这就是造成了内存浪费的点。

            

           // API中对view的解释:public var view: UIView! // The getter first invokes [self loadView] if the view hasn't been set yet. Subclasses must call super if they override the setter or getter.

            

//            

//            let addContactVC: AddContactViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("AddContactVCID") as! AddContactViewController

//            addContactVC.view.backgroundColor = UIColor.redColor()

//            addContactVC.nameTextField.text = "123"

//            

//            print(addContactVC)

//            addContactVC.view.backgroundColor = UIColor.whiteColor()

            

            //这样就可以获取到目的控制器。

            

            let addContactNC = segue.destinationViewControlleras! UINavigationController

            

            let addContactVC = addContactNC.viewControllers.firstas! AddContactViewController

0 0