一恢口、屬性傳值
A界面->B界面?zhèn)髦?/p>
B_界面.h文件(接收者)
? ? ? ? ? ? B界面.h
//1.聲明屬性
@property (nonatomic, copy) NSString *bString;
A_界面.m文件(發(fā)送者)
? ? ? ? ? ? A界面.m
//2.屬性傳值
BViewController *bVC = [BViewController new];
bVC.bString = @"A";
[self.navigationController pushViewController:bVC animated:YES];
B_界面.m文件(接收者)
? ? ? ? ? ? ? B界面.m
//3.結(jié)果
NSLog(@"A界面→B界面:%@", self.bString);
//輸出:? A界面→B界面:A
二署辉、方法傳值
A界面->B界面?zhèn)髦?/p>
B_界面.m文件(接收者)
? ? ? ? ? ? ? B界面.m
//1.自定義初始化方法
- (instancetype)initWithOne:(NSString *)one Two:(CGFloat)two{
self = [super init];
if (self) {
//4.結(jié)果
NSLog(@"A界面→B界面:%@ %.2f", one, two);
//輸出: A界面→B界面:A 99.90
}
return self;
}
B_界面.h文件(接收者)
? ? ? ? ? ? ? ? ? B界面.h
//2.聲明初始化方法
- (instancetype)initWithOne:(NSString *)one Two:(CGFloat)two;
A_界面.m文件(發(fā)送者)
? ? ? ? ? ? ? ? ? A界面.m
//3.方法傳值
BViewController *bVC = [[BViewController alloc] initWithOne:@"A" Two:99.9];
[self.navigationController pushViewController:bVC animated:YES];
三草冈、代理傳值
B界面->A界面?zhèn)髦?/p>
B_界面.h文件(發(fā)送者)
? ? ? ? ? ? ? ? ? ? B界面.h
#import
//1.聲明協(xié)議和代理方法
@protocol BViewControllerDelegate
- (void)protocolSendValue:(NSString *)value;
@end
@interface BViewController : UIViewController
//2.設(shè)置代理(ARC用weak,MRC用assign)
@property (nonatomic, weak) id myDelegate;
@end
B_界面.m文件(發(fā)送者)
? ? ? ? ? ? ? ? ? B界面.m
//3.讓代理執(zhí)行代理方法(代理傳值)
[self.myDelegate protocolSendValue:@"B"];
A_界面.m文件(接收者)
? ? ? ? ? ? ? ? ? A界面.m
//4.簽訂代理協(xié)議
@interface AViewController ()
@end
- (void)viewDidLoad {
[super viewDidLoad];
//5.指定代理
BViewController *bVC = [BViewController new];
bVC.myDelegate = self;
[self.navigationController pushViewController:bVC animated:YES];
}
#pragma mark -BViewControllerDelegate
//6.實現(xiàn)代理方法(結(jié)果)
- (void)protocolSendValue:(NSString *)value{
NSLog(@"B界面→A界面:%@", value);
//輸出: B界面→A界面:B
}
四、Block傳值
B界面->A界面?zhèn)髦?/p>
注:Block中要防止在文件中循環(huán)引用
B_界面.h文件(發(fā)送者)
? ? ? ? ? ? ? ? ? ? ?B界面.h
//1.聲明Block屬性
typedef void(^ValueBlock)(NSString *);
@interface BViewController : UIViewController
@property (nonatomic, copy) ValueBlock valueBlock;
@end
B_界面.m文件(發(fā)送者)
? ? ? ? ? ? ? ? ? ? ?B界面.m
//2.Block傳值(代碼塊屬性不為空)
if (self.valueBlock) {
self.valueBlock(@"B");
}
A_界面.m文件(接收者)
? ? ? ? ? ? ? ? ?A界面.m
BViewController *bVC = [BViewController new];
[self.navigationController pushViewController:bVC animated:YES];
//3.結(jié)果(Block中要防止在文件中循環(huán)引用)
//__weak typeof(self) weakSelf = self;
bVC.valueBlock = ^(NSString *string){
NSLog(@"B界面→A界面:%@", string);
//輸出: B界面→A界面:B
};
五胡桃、通知中心傳值
任意界面->A界面
注:發(fā)送者和接收者name參數(shù)必須保持一致
A_界面.m文件(接收者)
? ? ? ? ? ? ? ? ? ? A界面.m
//1.注冊通知
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(acceptNotification:) name:@"noticeSendValue" object:nil];
CViewController *cVC = [CViewController new];
[self.navigationController pushViewController:cVC animated:YES];
}
//2.銷毀通知
- (void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"noticeSendValue" object:nil];
}
//4.結(jié)果
- (void)acceptNotification:(NSNotification*)notification{
NSLog(@"%@",? notification.userInfo);
//輸出:? {name = text;}
}
C_界面.m(發(fā)送者)
? ? ? ? ? ? ? ? ? ? ?C界面.m
//3.通知傳值
[[NSNotificationCenter defaultCenter] postNotificationName:@"noticeSendValue" object:self userInfo:@{@"name": @"text"}];
六蜓堕、單例傳值
A界面->任意界面
使用單例模式,編寫ValueManager單例類來存儲數(shù)據(jù)
ValueManager.h文件(全局唯一)
//////////單例.h//////////
@interface ValueManager : NSObject
+ (ValueManager *)shareValueManager;
@property (nonatomic, copy) NSString *strValue;
@end
ValueManager.m文件(全局唯一)
//////////單例.m//////////
+ (ValueManager *)shareValueManager{
static ValueManager *shareValueManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
shareValueManager = [ValueManager new];
});
return shareValueManager;
}
A_界面.m文件(發(fā)送者)
//////////A界面.m//////////
//2.單例傳值(存值)
ValueManager *valueManager = [ValueManager shareValueManager];
valueManager.strValue = @"Singleton";
C_界面.m文件(接收者)
//////////C界面.m//////////
//3.結(jié)果(取值)
ValueManager *valueManager = [ValueManager shareValueManager];
NSLog(@"%@", valueManager.strValue);
//輸出: Singleton
七、NSuserDefault傳值
A界面->任意界面
A_界面.m文件(發(fā)送者)
//////////A界面.m//////////
//1.NSuserDefault傳值(存值)
[[NSUserDefaults standardUserDefaults] setObject:@"NSUserDefaults" forKey:@"name"];
[[NSUserDefaults standardUserDefaults] synchronize];
C_界面.m文件(接收者)
//////////C界面.m//////////
//2.取值
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"name"]);
//輸出:? NSUserDefaults