xib相關(七) —— Storyboard中的segue (一)

版本記錄

版本號 時間
V1.0 2018.04.15

前言

iOS中的視圖加載可以有兩種方式秒际,一種是通過xib加載,另外一種就是通過純代碼加載隘梨。它們各有優(yōu)點和好處程癌,xib比較直觀簡單,代碼比較靈活但是看著很多很亂轴猎,上一家公司主要風格就是用純代碼嵌莉,這一家用的就是xib用的比較多。這幾篇我們就詳細的介紹一個xib相關知識捻脖。感興趣的可以看上面寫的幾篇锐峭。
1. xib相關(一) —— 基本知識(一)
2. xib相關(二) —— 文件沖突問題(一)
3. xib相關(三) —— xib右側標簽介紹(一)
4. xib相關(四) —— 連線問題(一)
5. xib相關(五) —— 利用layout進行約束之界面(一)
6. xib相關(六) —— 利用layout進行約束之說明和注意事項(二)

Storyboard

一個SB相當于很多的Xib中鼠,SB只能基于VC不能基于View,很多個VC都可以和一個SB進行關聯(lián)沿癞,示例代碼如下:

SecVC *secVC = [[UIStoryboard storyboardWithName:@"Demo" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"SecVC"];

像上面代碼那樣援雇,我們傳入不同VC的identifier,就會得到不同的VC對象椎扬。

SB與xib很大的一點不同就是SB支持segue惫搏,接下來我們就看一下這個segue。


Segue

1. Segue簡單使用

Segue其實你可以把它想象成鏈接控制器的線蚕涤。我們進行控制器之間的跳轉如果用代碼寫就是push或者present出來一個VC筐赔。如果用segue那么不用添加任何代碼,直接可以實現(xiàn)跳轉揖铜。

我們在一個VC中選擇要發(fā)生跳轉的按鈕茴丰,按control拖動到另一個VC上就會出現(xiàn)一個菜單,在菜單上你就可以選擇跳轉的方式push天吓、present贿肩,這樣不用寫一行代碼就能完成頁面間的跳轉。

看下面這個示例龄寞。

下面我們用模擬器運行汰规,看一下

2. Segue傳值

在利用Segue進行傳值的時候,也可以進行傳值物邑。我們自定義一個控制器JJTestVC控轿,然后從控制器ViewController中進行跳轉,我們連接segue后拂封,點擊這個連線,修改右側的identify鹦蠕,如下圖所示冒签。

然后,我們在ViewController中钟病,重寫一個方法萧恕,如下所示:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"JJTestVC"]) {
        JJTestVC *vc = (JJTestVC *)segue.destinationViewController;
        vc.valueStr = @"hello world";
    }
}

在控制器JJTestVC中打印輸出

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    NSLog(@"It is me! -- %@", self.valueStr);
}

運行起來,點擊跳轉然后我們就可以看到輸出肠阱,結果如下所示:

2018-04-15 08:25:28.572558+0800 JJWebImage[1123:29362] It is me! -- hello world

3. 利用segue跳轉到不同控制器

我們在做業(yè)務的時候票唆,總會碰到點擊一個按鈕,在不同情況跳轉到不同VC的情況屹徘,利用segue也可以實現(xiàn)這個方法走趋。

下面我們就一起看一下。

首先我們新建立一個類JJTestTwoVC噪伊,并拖進去一個VC的SB簿煌,如下所示氮唯。

點擊下面的位置

彈出的對框框如下所示。

拖動manual到要跳轉的VC姨伟,如下圖所示惩琉。

下面我們就看這幾個選項。

show

  • 使用方法showViewController: sender:夺荒。
  • 一般用在UINavigationController的視圖控制器中瞒渠。
  • 切換方式:進入時由右向左,退出時由左向右技扼。
  • 新壓入的視圖控制器有返回按鈕伍玖,單擊可以返回。

Show Detail

  • 使用方法showDetailViewController: sender:淮摔。
  • 只適用于嵌入在UISplitViewController對象內的視圖控制器私沮,分割控制器用以替換詳細控制器。(DetailViewController)和橙。
  • 不提供返回按鈕仔燕。

Present Modally

  • 使用方法presentViewController: animated: completion:
  • 有多種不同呈現(xiàn)方式魔招,可根據(jù)需要設置晰搀。在iPhone中,一般以動畫的形式自下向上覆蓋整個屏幕办斑,用戶無法與上一個視圖交互外恕,除非關閉當前視圖;在iPad中乡翅,常見呈現(xiàn)為一個中心框鳞疲,中心框以動畫形式自下向上彈出,同時使底層視圖控制器變暗蠕蚜。
  • 不提供返回按鈕尚洽。

Present as Popover

在iPad中,目標視圖以浮動窗樣式呈現(xiàn)靶累,點擊目標視圖以外區(qū)域腺毫,目標視圖消失;在iPhone中挣柬,默認目標視圖以模態(tài)覆蓋整個屏幕潮酒。

Custom

自定義跳轉方式。

然后為這兩個segue加identify邪蛔,下面我們就看一下代碼方面急黎,首先在ViewController中加入下面代碼。

// 跳轉按鈕的點擊方法
- (IBAction)jumpButtonDidClick:(UIButton *)sender
{
    BOOL flag = YES;
    if (flag) {
        [self performSegueWithIdentifier:@"JJTestVC" sender:sender];
    }
    else {
        [self performSegueWithIdentifier:@"JJTestTwoVC" sender:sender];
    }
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"JJTestVC"]) {
        JJTestVC *vc = (JJTestVC *)segue.destinationViewController;
        NSLog(@"要跳轉到JJTestVC了");
    }
    
    if ([segue.identifier isEqualToString:@"JJTestTwoVC"]) {
        JJTestTwoVC *vc = (JJTestTwoVC *)segue.destinationViewController;
        NSLog(@"要跳轉到JJTestTwoVC了");
    }
}

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
{
    return YES;
}

在另外兩個要跳轉的控制器中加入下面代碼

// JJTestVC
- (void)viewDidLoad
{
    [super viewDidLoad];
    
    NSLog(@"It is me! -- JJTestVC");
}

// JJTestTwoVC
- (void)viewDidLoad
{
    [super viewDidLoad];

    NSLog(@"It is me! -- JJTestTwoVC");
}

下面我們運行就可以看見實現(xiàn)了正確控制器的挑轉,看一下輸出結果

2018-04-15 09:13:18.032299+0800 JJWebImage[1553:77325] 要跳轉到JJTestVC了
2018-04-15 09:13:18.038928+0800 JJWebImage[1553:77325] It is me! -- JJTestVC

修改flag為NO叁熔,運行看輸出結果

2018-04-15 09:14:39.521342+0800 JJWebImage[1595:79443] 要跳轉到JJTestTwoVC了
2018-04-15 09:14:39.529630+0800 JJWebImage[1595:79443] It is me! -- JJTestTwoVC

可見委乌,可以實現(xiàn)正確的控制器跳轉。

參考文章

1. segue - ios
2. What's the difference between all the Selection Segues?
3. Segue幾種類型(Show荣回、Show Detail遭贸、Present modally、Present as Popover)的區(qū)別

后記

本篇主要介紹了SB中的segue心软,感興趣的給個贊或者關注~~~

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末壕吹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子删铃,更是在濱河造成了極大的恐慌耳贬,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猎唁,死亡現(xiàn)場離奇詭異咒劲,居然都是意外死亡,警方通過查閱死者的電腦和手機诫隅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門腐魂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人逐纬,你說我怎么就攤上這事蛔屹。” “怎么了豁生?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵兔毒,是天一觀的道長。 經(jīng)常有香客問我甸箱,道長育叁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任芍殖,我火速辦了婚禮擂红,結果婚禮上,老公的妹妹穿的比我還像新娘围小。我一直安慰自己,他們只是感情好树碱,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布肯适。 她就那樣靜靜地躺著,像睡著了一般成榜。 火紅的嫁衣襯著肌膚如雪框舔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機與錄音刘绣,去河邊找鬼樱溉。 笑死,一個胖子當著我的面吹牛纬凤,可吹牛的內容都是我干的福贞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼停士,長吁一口氣:“原來是場噩夢啊……” “哼挖帘!你這毒婦竟也來了?” 一聲冷哼從身側響起恋技,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤拇舀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蜻底,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體骄崩,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年薄辅,在試婚紗的時候發(fā)現(xiàn)自己被綠了要拂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡长搀,死狀恐怖宇弛,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情源请,我是刑警寧澤枪芒,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站谁尸,受9級特大地震影響舅踪,放射性物質發(fā)生泄漏。R本人自食惡果不足惜良蛮,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一抽碌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧决瞳,春花似錦货徙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至屡贺,卻和暖如春蠢棱,著一層夾襖步出監(jiān)牢的瞬間锌杀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工泻仙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留糕再,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓玉转,卻偏偏與公主長得像突想,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子冤吨,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內容