版本記錄
版本號 | 時間 |
---|---|
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心软,感興趣的給個贊或者關注~~~