Storyboard 技巧---页面跳转、数据传递

顺向页面跳转
  • 事件跳转

    • 应用场景:在明确点击摸个按钮或者cell或者手势事件直接跳转到下一个页面(而且是点击完就跳转)
    • 实现步骤:先看下下面这张图片
Snip20161128_2.png

这张图中实际的逻辑,是点击“我的club”按钮跳转到“我的club”页面。
以下步骤:
- 1、搭建好“course View Controller” 和 “我的club”页面
- 2、从“courser View Controller” 页面中的“我的club”按钮拖拽segue到“我的club”页面
只需以上两步就完成了,而且不需要设置segue的identifier(这是最简单的跳转)

  • 代码跳转
    • 应用场景:在按钮点击后做些逻辑处理后再(或者判断是否)跳转

    • 实现步骤:这个和上一个“事件跳转”不同的地方,主要在于,不要从事件上拖拽segue到下一个控制器,而是前一个控制器上拖拽segue到下一个控制器上。
      以下步骤:

      • 1、搭建好“course View Controller” 和 “我的club”页面
      • 2、从“courser View Controller” 页面中的“我的club”按钮拖拽segue到“我的club”页面
      • 3、配置segue的identifile
      • 4、在需要跳转的地方,调用这个方法:
      self?.performSegueWithIdentifier("segue的identifile", sender: nil)
      
UnWind Segue: 逆向页面跳转(返回前面指定的某一页)
  • 应用场景: 从一个页面返回上一个页面或者前面的某一个页面

  • 实现步骤:(以下将跳转的页面(self)用“当前页面”表示,需要跳转到的页面用“目标页面”表示)

    • 第一步:在目标页面一定要实现这个方法:
    // 注意:
    // @INAction一定要有,因为在storyboard中用到;
    // 后面的参数也一定要加;
    // 方法名自己定义(当然需要自己清楚这个方法名对应哪一个控制器的,不然多的时候很容易混淆)
    @IBAction func 方法名(segue: UIStoryboardSegue) {
        
    }
    
    • 第二步:在storyboard中找到当前页面的控制器,然后建立连接

      • 1、如图一,将从1拖segue到2,松手后会出现一些方法(见图二),你在目标页面添加的方法(步骤一添加的)


        ![Snip20161129_7.png](http://upload-images.jianshu.io/upload_images/739097-116ca8dfba7d57ba.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
      • 2、选定目标页面中的方法(如上图2,选中对应的方法)

      • 3、前面两步完成后,将会在当前页面看到Unwind segue(如下图),点击选中后,会出现Unwind Segue的配置,此处一定要配置唯一的identifier


        Snip20161129_9.png
      • 4、在对应的地方调用对应的方法,就可以跳转到之前的页面了

      // segue的identifier是唯一的
      // sender:传递参数,一般用不到,可以通过其他简单的方式处理,详见下面的“数据传递”
      self?.performSegueWithIdentifier("segue的identifile", sender: nil)
      
数据传递
  • 下传:传递到下一个页面
    每一个控制器都有一个系统的方法:

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        
        if let vc = segue.destinationViewController as? InstructorViewController {
            vc.instructor = instructors[sender as! Int]
        }
        
    

    上面这个方法就是用来数据传递的:

    • 方法调用时间:在跳转到下一个页面前就会实现
    • 参数:
      • segue:有identifier和destinationViewController 属性,供开发者判断跳转到哪一个控制器;
      • sender:如果是控件点击事件跳转到下一个页面,sender就是对于的控件(button或者cell等)或手势(tap等);如果是代码调用(self?.performSegueWithIdentifier("segue的identifile", sender: nil))用这个方法,那sender传递的什么就是什么
  • 回传:传递到前面指定的页面
    在前面的“UnWind Segue:”部分我们有说到,在目标控制器中定义一个方法:

    @IBAction func 方法名(segue: UIStoryboardSegue) {
        
    }
    

    这个方法,就可以用来值回传

    • 实现时间:在跳转方法调用,当前页面消失之前调用
    • 参数:segue的sourceViewController和identifier能判断和取出跳转回来的是那个页面(viewcontroller),页面控制器都拿到了,那要传递的数据想要什么就有什么
  • 在页面跳转前处理下数据
    在理解和吸收了前面两种值传递后,这个就是小儿科了。。。
    这种情况只能通过代码调用这个方法去实现,在实现这句代码前面进行数据下载,下载成功后在调用页面跳转的方法:
 self?.performSegueWithIdentifier("segue的identifile", sender: nil)
瘦身去臃肿

此部分是关于storyboard reference的应用

Snip20161129_10.png

如上图,将storyboard拆分成了很多个,每一个都是单独的功能区,这样就不会导致在一个storyboard里出现n个控制器,之前的segue密密麻麻。
那这样拆分后如何像在一个storyboard中一样关联起来呢?这是和问题,以下是处理方式:

  • 需求:从main.stroyboard中的clubsViewController跳转到Gig.storyboard中的ClubDetailViewController

  • 实现:

    • 第一步:在main.storyboard中的clubsViewController后面拖拽一
      个storyboard reference
Snip20161129_12.png
  • 第二步:设置storyboard reference:选中storyboard reference,右侧就会出现其属性的设置,选择对应的storyboard文件“Gig”


    Snip20161129_13.png
  • 第三步:如果ClubDetailViewController是Gig.storyboard的initaiViewController,后面的就可以不用设置了,就完成了。但是我们打开Gig.storyboard文件查看后,ClubDetailViewController并不是。


    Snip20161129_14.png

    因此,我们需要设置它的storyboard ID。设置完后,再回到ClubsViewController的地方,找到storyboard referrence,然后设置其Referenced ID,这个ID一定要和之前设置ClubDetailViewController的storyboard ID一样,否则会crash。


    Snip20161129_15.png

    另外,同一个storyboard中也可以这样使用,比如,两个控制器距离太远,拖拽segue太不方便,这时候这种处理方式十分合适。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容