Checklists学习日志之prepareForSegue方法的使用

稍微知道了一点点prepareForSegue的应用。先记一下。

首先贴上Checklists应用中ChecklistViewController中prepareForSegue方法的使用。

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

    {

        if segue.identifier == "AddItem"{

            // segue's identifier

            //2

            // the segue does not go directly to AddItemViewController but to the navigation controller that embeds it. 

            let navigationController = segue.destinationViewController as! UINavigationController

            //3

            let controller = navigationController.topViewController as! AddItemViewController

            //4

            controller.delegate = self

        }

        else if segue.identifier == "EditItem"

        {

            let navigationController = segue.destinationViewController as! UINavigationController

            let controller = navigationController.topViewController as! AddItemViewController

            // The view controller at the top of the navigation stack. 获取需要的ViewController

                controller.delegate = self

            if let indexPath = tableView.indexPathForCell(sender as! UITableViewCell)

            {

                controller.itemToEdit = items[indexPath.row]

            }

        }

    }




    // 这个method 主要解决2个问题:

    // 1 获取所要跳转到的视图控制器(ViewController);这里是AddItemViewController

    // 2 同时,将上一个视图的数据(A),传递给下一个视图(B) (比如: 上一个视图是TableView 那么,就可能要将点击cell的行号传递到下一个视图)。

    // 获取到下一个视图控制器后, 可以跳转过去了。但仅仅跳转还不够,总得将数据传递过去吧。 比如上一个视图是TableView,当用户点击某个Cell进入下个页面时,就得将所点击的cell的内容传递给下个页面。

    // 该方法的触发条件是:当前的视图控制器即将被另一个视图控制器所替代时,segue将处于激活状态,从而调用prepareForSegue方法.

    // segue:用以描述一个跳转的相关信息,比如是A controller,跳转至B controller页面,则我们可以通过它获取到A controller的一个实例对象,和B controller的一个实例对象。注意调用这个函数的时候,跳转行为还没有发生,所以我们可以在这个方法内部,获取到B controller的实例,然后传递一些参数过去。

    // sender:表示是谁触发了这次跳转。因为是从A--->B,所以这个sender可能是A controller里面的任何一个对象。我们可以用它来区分同一个页面上触发的不同的跳转行为。这里的segue.identifier对应了在主界面即ChecklistViewController中点击的按钮对应的方法。比如点击了AddItem按钮,segue.identifier就是AddItem。

    // 比如:A页面上有2个按钮x,y,当点击x按钮时,就跳B页面;当点击y按钮时,就跳C页面。所以当点击x按钮时,触发了一个跳转,UIStoryboard的运行时就会去调用A controller里面的这个函数,其中sender就是x按钮。点击y按钮类似。这时候我们就可以判断如果senderx按钮,则给B页面传递数据;如果按钮时y,则给C页面传递数据。或者是其他业务逻辑。

       这里,由于ChecklistViewController直接指向的是UINavigationController,所以segue的segue.destinationViewControllerUINavigationController。内嵌于UINavigationControllerAddItemViewController才是我们想要指向的ViewController。所以使用navigationController.topViewControllerA获取AddItemViewController这个界面。

       如果是AddItem唤醒的segue,则不用将数据从A传递给B。如果是EditItem唤醒的segue,则需要将数据从A中的item传递给B:controller.itemToEdit = items[indexPath.row]


       同时在B中,我们需要定义optional的变量:var itemToEdit: ChecklistItem?







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值