iOS-ViewController之間的傳值

一昭齐、控制器之間的正向傳值:
1瞎惫、屬性傳值
1.1盐股、通過storyboard創(chuàng)建控制器
//Segue
定義:Storyboard上每一根用來界面跳轉(zhuǎn)的線,都是一個UIStoryboardSegue對象
屬性:

//Segue ID
NSString *identifier; 
//來源控制器
UIViewController *sourceViewController;   
//目標(biāo)控制器
UIViewController *destinationViewController;

類型:
(1)Show
根據(jù)當(dāng)前屏幕中的內(nèi)容鲫寄,在master area或者detail area中展示內(nèi)容吉执。
例如:如果app當(dāng)前同時顯示master和detail視圖,內(nèi)容將會壓入detail區(qū)域地来。
如果app當(dāng)前僅顯示master或者detail視圖戳玫,內(nèi)容則壓入當(dāng)前視圖控制器堆棧中的頂層視圖。
(2)Show Detail
在detail area中展現(xiàn)內(nèi)容未斑。
例如:即使app同時顯示master和detail視圖咕宿,那么內(nèi)容將被壓入detail區(qū)域
如果app當(dāng)前僅顯示Master或者detail視圖,那么內(nèi)容將替換當(dāng)前視圖控制器堆棧中的頂層視圖蜡秽。
(3)Present Modally
使用模態(tài)展示內(nèi)容府阀。屬性面板中提供presentation style (UIModalPresentationStyle)與 transition style (UIModalTransitionStyle)兩種選項
(4)Present as Popover
在某個現(xiàn)有視圖中的錨點(diǎn)處使用彈出框展示內(nèi)容。這個選項可指定顯示在彈出框視圖一邊上的箭頭可用方向芽突,同時也是指定錨點(diǎn)視圖的一個選項试浙。
(翻譯來自網(wǎng)友)


image.png

image.png

1.2、通過代碼創(chuàng)建控制器
首先創(chuàng)建控制器AViewController和BViewController,點(diǎn)擊控制器A中的button跳轉(zhuǎn)到B控制器傳值
寞蚌,B控制器有個name屬性,在跳轉(zhuǎn)的方法里傳值

-(void)btnClick{
BViewController *BVC = [[BViewController alloc] init];
BVC.name = @"要傳的值";
[self.navigationController pushViewController:BVC animated:YES ];
}

2田巴、通知
2.1.在A控制器發(fā)送通知

//需要傳的參數(shù)
NSDictionary *dict = @{@"key":value};
//發(fā)送通知
[[NSNotificationCenter defaultCenter]postNotificationName:@"sendDataToTwoVc" object:nil userInfo:dict];

2.2力细、在B控制器監(jiān)聽通知

//監(jiān)聽通知(通知名字一定要寫正確)
 [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(setData:) name:@"sendDataToTwoVc" object:nil];
//監(jiān)聽通知后調(diào)用
-(void)setData:(NSNotification *)notification{
     NSLog(@"dict - %@",notification.userInfo);
}
//移除需要觀察的通知
-(void)dealloc{
    [[NSNotificationCenter defaultCenter]removeObserver:self];
}
//注意:如果發(fā)送的通知指定了object對象,那么觀察者接收的通知設(shè)置的object對象與其一樣固额,才會接收到通知,但是接收通知如果將這個參數(shù)設(shè)置為了nil煞聪,則會接收一切通知斗躏。

3、NSUserDefault

//設(shè)置需要保存的對象
[[NSUserDefaults standardUserDefaults] setObject:@"value" forKey:@"key"];
//同步磁盤
[[NSUserDefaults standardUserDefaults] synchronize];
//獲取保存的對象
[[NSUserDefaults standardUserDefaults]objectForKey:@"key"];

二昔脯、控制器之間的逆向傳值:
1啄糙、block
有兩個控制器分別是AViewController和BViewController,點(diǎn)擊A控制器中的按鈕跳轉(zhuǎn)到B控制器,點(diǎn)擊B控制器的屏幕回到A控制器云稚,并把B控制器textField.text傳到A控制器中隧饼,改變A控制器中btn的title.

//A控制器.m文件
#import "AViewController.h"
#import "BViewController.h"

@implementation AViewController
//button的點(diǎn)擊事件
- (IBAction)clickDown:(id)sender {
    BViewController *vc = [[BViewController alloc] init];
    vc.backBlock = ^(NSString *titleStr) {
            [self.btn setTitle:titleStr forState:UIControlStateNormal];
        };
    [self.navigationController pushViewController:vc animated:YES];
}
//B控制器.h文件
#import <UIKit/UIKit.h>

@interface BViewController : UIViewController
@property(nonatomic,copy)void(^backBlock)(NSString *titleStr);
@end

//B控制器.m文件
#import "BViewController.h"

@interface BViewController ()
@property (weak, nonatomic) IBOutlet UITextField *textField;
@end

@implementation BViewController

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    self.backBlock(self.textField.text);
}

2、代理
在B控制器中指定協(xié)議静陈,讓A控制器遵守協(xié)議設(shè)置A控制器為代理并實現(xiàn)協(xié)議中的方法

A控制器.m文件
#import "AViewController.h"
#import "BViewController.h"

@interface AViewController ()<BViewControllerDelegate>

@end

@implementation AViewController

- (IBAction)clickDown:(id)sender {
//在使用block和代理時注意循環(huán)引用問題燕雁,當(dāng)一個對象持有block,而該block又持有該對象時鲸拥,類似下面的偽代碼會照成循環(huán)引用拐格,__weak typeof(self) weakself=self;
    __weak typeof(self) weakSelf = self;
    BViewController *vc = [[BViewController alloc] init];
    vc.delegate = weakSelf;
    [self.navigationController pushViewController:vc animated:YES];
}
//協(xié)議中的方法:
-(void)sendString:(NSString *)str{
//B控制器傳過來的值str
    [self.btn setTitle:str forState:UIControlStateNormal];
}
//A控制器.h文件
#import <UIKit/UIKit.h>

@protocol BViewControllerDelegate <NSObject>
-(void)sendString:(NSString *)str;
@end
@interface BViewController : UIViewController
@property(weak,nonatomic)id<BViewControllerDelegate>delegate;
@end

//A控制器.m文件
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    [self.delegate sendString:self.textField.text];
    [self.navigationController popViewControllerAnimated:YES];
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市刑赶,隨后出現(xiàn)的幾起案子捏浊,更是在濱河造成了極大的恐慌,老刑警劉巖撞叨,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件金踪,死亡現(xiàn)場離奇詭異,居然都是意外死亡牵敷,警方通過查閱死者的電腦和手機(jī)胡岔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來劣领,“玉大人姐军,你說我怎么就攤上這事〖馓裕” “怎么了奕锌?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長村生。 經(jīng)常有香客問我惊暴,道長,這世上最難降的妖魔是什么趁桃? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任辽话,我火速辦了婚禮肄鸽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘油啤。我一直安慰自己典徘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布益咬。 她就那樣靜靜地躺著逮诲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪幽告。 梳的紋絲不亂的頭發(fā)上梅鹦,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天,我揣著相機(jī)與錄音冗锁,去河邊找鬼齐唆。 笑死,一個胖子當(dāng)著我的面吹牛冻河,可吹牛的內(nèi)容都是我干的箍邮。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼叨叙,長吁一口氣:“原來是場噩夢啊……” “哼媒殉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起摔敛,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤廷蓉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后马昙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桃犬,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年行楞,在試婚紗的時候發(fā)現(xiàn)自己被綠了攒暇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡子房,死狀恐怖形用,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情证杭,我是刑警寧澤田度,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站解愤,受9級特大地震影響镇饺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜送讲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一奸笤、第九天 我趴在偏房一處隱蔽的房頂上張望惋啃。 院中可真熱鬧,春花似錦监右、人聲如沸边灭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽存筏。三九已至,卻和暖如春味榛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背予跌。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工搏色, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人券册。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓频轿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親烁焙。 傳聞我的和親對象是個殘疾皇子航邢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評論 2 361

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