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

//用的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.destinationViewController as! UINavigationController

            

            let addContactVC = addContactNC.viewControllers.first as! AddContactViewController

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值