屬性傳值:從前往后傳值
步驟 :
在第二個頁面, 接口文件里, 聲明一個NSString類型的屬性, 用來做存放傳遞的中間結(jié)果 nsstring T
在第一個頁面, 實現(xiàn)頁面跳轉(zhuǎn)的方法里, 將要傳遞的值賦值給第二個頁面的中間變量 T = one.text
在第二個頁面, 將本頁面中控件的值賦值為中間變量 two.text = T
代理傳值:從后往前傳值
步驟:
在第二個頁面中, 聲明'協(xié)議
在第二個頁面中, 聲明協(xié)議方法(帶參數(shù))
在第二個頁面中, 聲明設(shè)置代理的方法(setter方法)
在第二個頁面的跳轉(zhuǎn)頁面的方法中, 指定代理實現(xiàn)代理方法(帶參數(shù))
在第一個頁面 , 遵循協(xié)議
在第一個頁面的跳轉(zhuǎn)頁面中, 設(shè)置代理人
在第一個頁面中, 實現(xiàn)代理方法
block傳值: 從后往前傳值
步驟:
在第二個頁面中, 重命名一個block塊(有參數(shù))
在第二個頁面中, 定義一個上面聲明的block塊的 block
在第二個頁面中, 實現(xiàn)跳轉(zhuǎn)的方法中(即: 跳轉(zhuǎn)頁面之前), 調(diào)用block(帶有實參)
在第一個頁面中, 實現(xiàn)跳轉(zhuǎn)的方法中(即: 有第二個頁面類的對象), 用第二個類的對象.block ,在block方法中實現(xiàn)賦值(形參)
三種頁面?zhèn)髦祵嵗菔?1.屬性傳值:從前往后傳值
描述: 這里新建兩個頁面, RootViewController 和 SecondViewController ,我們要實現(xiàn)將第一個頁面上的值,傳遞到第二個頁面的效果
第一步: 在SecondViewController.h 文件中 聲明一個屬性
#import <UIKit/UIKit.h>
@interface SecondViewController : UIViewController
//聲明中間變量
@property (nonatomic, retain)NSString *textString;
@end
第二步: 在RootViewController文件中, 給上面定義的中間變量賦值
這里將賦值放到了實現(xiàn)頁面跳轉(zhuǎn)的方法中, 是因為用引用第二個頁面,而此方法中已經(jīng)聲明了一個對象(即:secondVC)
- (void)nextPage:(UINavigationItem *)next{
SecondViewController *secondVC = [SecondViewController new];
//給中間變量賦值
secondVC.textString = self.rightText.text;
[self.navigationController pushViewController:secondVC animated:YES];
}
//第三步: 在SecondViewController.m文件中, 實現(xiàn)傳值—>賦值過程
self.rightText.text = self.textString;
______________________________________________________________________________________________________
2 .代理傳值:從后往前傳值
描述: 這里新建兩個頁面, RootViewController 和 SecondViewController ,我們要實現(xiàn)將第二個頁面上的值,傳遞到第一個頁面的效果
第一步: 在SecondViewController.h頁面聲明代理協(xié)議 , 代理方法, 及指定代理人的屬性
#import <UIKit/UIKit.h>
//第一步 聲明協(xié)議
@protocol secondDelegate<NSObject>
//第二步 聲明代理方法
- (void)changeValue:(NSString *)value;
@end
@interface SecondViewController : UIViewController
//第三步 設(shè)置代理方法
@property (nonatomic, weak)id<secondDelegate>delegate;
@end
第二步:在SecondViewController.m文件里, 調(diào)用代理方法
這里代理方法的執(zhí)行位置,可以任意!!
- (void)backAC:(UINavigationItem *)back{
//第四步 執(zhí)行代理方法
[self.delegate changeValue:self.rightText.text]; [self.navigationController popViewControllerAnimated:YES];
}
第三步: 在RootViewController.m文件中遵循協(xié)議
//第五步 遵循協(xié)議
@interface RootViewController ()<secondDelegate>
第四步: 在RootViewController.m文件中
跳轉(zhuǎn)方法中實現(xiàn)
- (void)nextPage:(UINavigationItem *)next{
SecondViewController *secondVC = [SecondViewController new];
//第六步 指定代理人
secondVC.delegate = self;
[self.navigationController pushViewController:secondVC animated:YES];
}
第五步: 在RootViewController.m文件中
第七步 實現(xiàn)協(xié)議方法
- (void)changeValue:(NSString *)value{
//將協(xié)議中傳過來的值, 賦值給當前的label
self.leftLabel.text = value;
}
3 .block傳值:從后往前傳值
描述: 這里新建兩個頁面, RootViewController 和FirstViewController ,我們要實現(xiàn)將第二個頁面上的值,傳遞到第一個頁面的效果
第一步: 在FirstViewController.h重命名一個block
#import <UIKit/UIKit.h>
第一步 : 聲明block方法
typedef void(^changeValueBlock)(NSString *string);
@interface FirstViewController : UIViewController
第二步 : 聲明block屬性
//copy : 從棧區(qū)copy到堆區(qū)來使用
@property (nonatomic, copy)changeValueBlock block;
@end
第二步: 在FirstViewController.m文件中的跳轉(zhuǎn)方法內(nèi), 調(diào)用該block并傳值
- (void)backAction:(UIButton *)back{
第三步 : 將要傳遞的內(nèi)容, 作為block的參數(shù)
self.block(self.textField.text);
[self.navigationController popViewControllerAnimated:YES];
}
第三步: 在RootViewController.m文件中的跳轉(zhuǎn)方法內(nèi), 調(diào)用該block并接收值
- (void)nextAC:(UIButton *)next{
FirstViewController *firstVC = [FirstViewController new];
第四步 : 實現(xiàn)傳值(接收傳遞過來的內(nèi)容)
__weak RootViewController *rootVC = self;
firstVC.block = ^(NSString *string){
rootVC.textLabel.text = string; };
[self.navigationController pushViewController:firstVC animated:YES];
}