Segue遇到的一些坑

通过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遇到的一些坑)