美文网首页
Segue遇到的一些坑

Segue遇到的一些坑

作者: FishSha | 来源:发表于2016-05-05 18:57 被阅读1001次

    通过segue跳转到的界面,都是一个新的实例而不是之前的界面!!!传值的时候尤其要记得,不然会出现明明传值了,但是到对应界面却发现,传过来的值没有了!?

    多个场景之间切换样式(kind):

    Show(e.g. Push):和Push不同,哪怕不在Navigation下面也可以通过Show跳转过去。但是必须在启用Size Class。

    Show Detail(e.g. Replace)

    Present Modally

    Resend As Popover

    Deprecated Segue:

    Push:跳转到一个新的视图,可以前后移动,用于导航视图控制器;(必须在NavigationController中使用,不然跳转时会Crash!)

    Modal:过渡到另一个场景,用于完成某项任务,完成后关闭并返回;(返回方法一般采用DismissViewController())

    Popover

    Replace

    Segue过渡类型(modalTransitionStyle):

    是从一个场景切换到另一个场景时播放的动画。一般用默认的就好了。

    Cover Vertical -- 新场景从下向上移动,逐渐覆盖旧场景。

    Flip Horizontal -- 视图水平翻转,以显示背面的新场景。

    Cross Dissolve -- 旧场景淡出,新场景淡入。

    Partial Curl -- 旧场景像书页一样翻开,显示下面的新场景。

    Segue显示样式(modalPresentationStyle):

    它决定了模态视图在屏幕上的显示方式,(只在iPad应用程序中)

    Form Sheet(表单) -- 将场景调整到比屏幕小(不管朝向),并在当前场景后面显示原始场景,这几乎相当于在一个iPad窗口中显示。

    Page Sheet(页面) -- 调整场景大小,使其以纵向格式显示。

    Full Screen(全屏) -- 调整场景大小,使其覆盖整个屏幕。

    Current Context(当前上下文) -- 以原始场景的显示方式展示场景。

    Segue跳转方式:

    跳转到一个新的界面实例:

    1、在StoryBoard中拖动连接到对应的controller中即可;

    2、在Action的事件中添加preformSegueWithIdentifier();

    3、静态代码跳转:

    @IBActionfuncback(sender:UIButton) {

    //1、获取Main StoryBoard;

       let mainStoryBoard =UIStoryboard.init(name:"Main", bundle:nil)

    //2、获取目标Controller的identifier

       let newViewController = mainStoryBoard.instantiateViewControllerWithIdentifier("view1") as! ViewController

    //3、设置跳转样式;

            newViewController.modalTransitionStyle=UIModalTransitionStyle.CoverVertical

    //4、设置显示样式;

            newViewController.modalPresentationStyle=UIModalPresentationStyle.FullScreen

    //5、跳转并显示目标Controller

            self.presentViewController(newViewController, animated:true) {

                    print("ok")

            }

    返回之前的界面

    1)通过Segue,但是要在对应的view中申明unwind方法(该方法名可以随意,但是方法前一定要申明 @IBAction,方法的第一个参数类型必须是UIStoryBoardSegue),然后在StoryBoard中将Segue连接到对应view的Exit中的unwind方法上;

    2)通过dismissViewControllerAnimated()关闭当前界面而回到上一界面;(仅适用于Modal样式)

    3)通过self.navigationController?.popToViewController(viewController: UIViewController, animated:Bool),使用的是压栈的形式,后进先出,比如,navigationController中经过了5个View,也就是navigationControllers队列中有5个实例对象[0、1、2、3、4],当从第四个view回退至第2个界面,直接通过pop方法,navigationController.viewControllers[1]即可。但是如之前说是压栈的形式,所以后面的2、3、4的界面对象将消失,再次跳转过去,会生成新的实例对象。

    更新中……

    相关文章

      网友评论

          本文标题:Segue遇到的一些坑

          本文链接:https://www.haomeiwen.com/subject/rbqrrttx.html