IOS開發(fā)-使用Storyboard進行界面跳轉(zhuǎn)及傳值

目錄:

一奴曙、使用Storyboard進行跳轉(zhuǎn)

1)純Storybard界面操作

2)使用代碼進行跳轉(zhuǎn)

二洽糟、Storyboard界面?zhèn)髦?/p>

1)使用prepareForSegue方法進行跳轉(zhuǎn):

2)Storyboard Id跳轉(zhuǎn)一坤溃、使用Storyboard進行跳轉(zhuǎn)

1)純Storyboard界面操作我們在Storyboard上放置一個按扭薪介,在按扭上方點擊并按住“右鍵”不放昭灵,拖動到跳轉(zhuǎn)的下一個界面上。松開右鍵后试疙,會有一個黑色透明的彈出框抠蚣,選擇跳轉(zhuǎn)的方式:從這里可以看到嘶窄,界面和界面之間多了一條線連接柄冲,如下圖:我們可以在Xcode右邊的工具欄看到现横,我們剛剛的連線操作(現(xiàn)在可以運行項目了):

2)使用代碼進行跳轉(zhuǎn)我們把剛剛的連線刪除掉,如下圖所示:新建一個繼承于UIViewController的類CodeViewController:選中按扭所在的界面骇两,設(shè)置它的類文件低千,默認都是繼承于UIViewController示血,如下圖所示:我們把它改成剛剛新建的類“CodeViewController”饱亮,如下圖所示:把界面縮薪稀(你可以在空白的地方雙擊一下壹无,或者右鍵選擇縮放比例)斗锭,這次我們不是直接使用“按扭”連接界面,而是進行界面和界面之間的連線帮毁,如下圖所示:注意:100%的縮放是不能進行界面和界面之間的連線烈疚!之后的操作和前面的一致爷肝,為了容易理解,我還是貼一下圖:選中“這條線”金赦,在Storyboard Segue的Identifier指定一個標識符夹抗,后面我們會用到:這時我們需要為按扭添加一個事件兔朦,為此需要同時顯示Storyboard和.m文件,操作如下:創(chuàng)建事件的操作和之前連線的操作一樣:為這個事件創(chuàng)建一個名字乏奥,然后點擊Connect:在事件里添加如下代碼亥曹,把剛連線的Identifier傳進去媳瞪,sender一般為"self":[self performSegueWithIdentifier:@"EasyCode" sender:self];這樣蛇受,就可以成功跳轉(zhuǎn)了兢仰。

二、Storyboard界面?zhèn)髦?/p>

1)使用prepareForSegue方法進行跳轉(zhuǎn):我們創(chuàng)建兩個類轻专,PrepareViewController和ReceiveViewController然后在Storyboard上新建兩個ViewController请垛,把兩個界面連接起來宗收。操作步驟和上方(代碼跳轉(zhuǎn))的相同镜雨,這次我們把連線的Identifier定義為“SendValue”: 有按扭的界面的類設(shè)置為PrepareViewController,如下圖所示:選擇第二個界面挑宠,設(shè)置繼承的類為ReceiveViewController:ReceiveViewController.h:#import@interface ReceiveViewController : UIViewController

@property (strong, nonatomic) NSString *name;

@property (assign, nonatomic) int age;

@end

ReceiveViewController.m各淀,當(dāng)然是要輸出一下啦碎浇,不然怎么知道傳值有沒有成功:

#import "ReceiveViewController.h"

@interface ReceiveViewController ()

@end

@implementation ReceiveViewController

- (void)viewDidLoad {

[super viewDidLoad];

NSLog(@"name is %@, age is %d", _name, _age);

}

@end

PrepareViewController.m文件:

#import "PrepareViewController.h"

#import "ReceiveViewController.h"

@interface PrepareViewController ()

@end

@implementation PrepareViewController

- (IBAction)goAction:(id)sender

{

// 根據(jù)指定線的ID跳轉(zhuǎn)到目標Vc

[self performSegueWithIdentifier:@"SendValue" sender:self];

}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

// segue.identifier:獲取連線的ID

if ([segue.identifier isEqualToString:@"SendValue"]) {

// segue.destinationViewController:獲取連線時所指的界面(VC)

ReceiveViewController *receive = segue.destinationViewController;

receive.name = @"Garvey";

receive.age = 110;

// 這里不需要指定跳轉(zhuǎn)了,因為在按扭的事件里已經(jīng)有跳轉(zhuǎn)的代碼

// [self.navigationController pushViewController:receive animated:YES];

}

}

@end

可以成功接收到值啦(大功告成):

2)Storyboard Id跳轉(zhuǎn)

繼續(xù)拖兩個純凈的界面(VC)到Storyboard上苟穆,第一個界面也是放上一個UIButton:

IdViewController是我剛新建出來的類雳旅,接收值的界面用回ReceiveViewController類攒盈,指定界面繼承的類為(IdViewController哎榴、ReceiveViewController)

第二個界面設(shè)置Storyboard id為“IdReceive”叹话,后面跳轉(zhuǎn)會用到:

IdViewController.m

- (IBAction)action:(id)sender

{

// 獲取指定的Storyboard驼壶,name填寫Storyboard的文件名

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

// 從Storyboard上按照identifier獲取指定的界面(VC)热凹,identifier必須是唯一的

ReceiveViewController *receive = [storyboard instantiateViewControllerWithIdentifier:@"IdReceive"];

receive.name = @"GC";

receive.age = 10;

[self.navigationController pushViewController:receive animated:YES];

}

可以運行程序了,能夠成功接收到值相速,成功突诬!

小結(jié):你們能否看出各個方法的優(yōu)點和缺點芜繁?現(xiàn)在沒發(fā)現(xiàn)不要緊骏令,當(dāng)你們以后遇上真正需要的時候榔袋,優(yōu)缺點就很容易知道了凰兑,這也算是留給你們思考的一件事情吧聪黎。

題外話:

有部分人是不同意使用Storyboard的,他們的的觀點如下:

1)Storyboard出現(xiàn)的錯誤不能調(diào)試,往往使得他們開發(fā)緩慢

2)對于多人開發(fā)喉镰,版本管理會比較復(fù)雜

3)Storyboard經(jīng)常無緣無故出現(xiàn)問題侣姆!使得他們很頭痛捺宗!

首先蚜厉,對于第1點和第3點的回答:Storyboard出現(xiàn)的錯誤往往是可以避免的昼牛。其次,Storyboard不會無緣無故出現(xiàn)問題胞四,如果真的出現(xiàn)問題了辜伟,往往是開發(fā)者的操作不當(dāng)成造成的游昼。我為什么這樣說烘豌?

因為我以前也遇到很多因Storyboard引起的錯誤廊佩,那時候的我也經(jīng)常怨Storyboard靖榕。但隨著對Storyboard越來越熟悉后茁计,我才發(fā)現(xiàn)星压,以前全都是因為自己操作不當(dāng)娜膘,而造成程序的崩潰竣贪。

第2點:多人開發(fā)演怎,可以區(qū)分模塊開發(fā),每個人負責(zé)的模塊都不相同甘桑,不一定要所有人的都開發(fā)同一個模塊扇住。當(dāng)然艘蹋,有特殊情況的我也不知道女阀,所以說這個需要根據(jù)項目的大小和復(fù)雜度去判定的浸策。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惫确,一起剝皮案震驚了整個濱河市改化,隨后出現(xiàn)的幾起案子枉昏,更是在濱河造成了極大的恐慌兄裂,老刑警劉巖晰奖,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件港华,死亡現(xiàn)場離奇詭異,居然都是意外死亡臊岸,警方通過查閱死者的電腦和手機帅戒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門逻住,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瞎访,“玉大人扒秸,你說我怎么就攤上這事伴奥∈搬悖” “怎么了尼啡?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵玄叠,是天一觀的道長读恃。 經(jīng)常有香客問我寺惫,道長西雀,這世上最難降的妖魔是什么艇肴? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任再悼,我火速辦了婚禮冲九,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘冀宴。我一直安慰自己略贮,他們只是感情好刨肃,可當(dāng)我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布真友。 她就那樣靜靜地躺著盔然,像睡著了一般愈案。 火紅的嫁衣襯著肌膚如雪站绪。 梳的紋絲不亂的頭發(fā)上恢准,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天,我揣著相機與錄音敏沉,去河邊找鬼盟迟。 笑死队萤,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赵辕,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蚕键!你這毒婦竟也來了锣光?” 一聲冷哼從身側(cè)響起誊爹,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎搂漠,沒想到半個月后桐汤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惊科,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡馆截,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了窖张。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宿接。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡赘淮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出睦霎,到底是詐尸還是另有隱情梢卸,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布副女,位于F島的核電站蛤高,受9級特大地震影響碑幅,放射性物質(zhì)發(fā)生泄漏戴陡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一沟涨、第九天 我趴在偏房一處隱蔽的房頂上張望恤批。 院中可真熱鬧,春花似錦拷窜、人聲如沸开皿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赋荆。三九已至,卻和暖如春懊昨,著一層夾襖步出監(jiān)牢的瞬間窄潭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工酵颁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嫉你,地道東北人。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓躏惋,卻偏偏與公主長得像幽污,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容