看到一個demo文件, 將IOS VC間傳值的方法進行羅列整理,供學習參考。
1.初始化傳值
-
VC1
/***********初始化傳值**************/
ZQMainVC *mainVC=[[ZQMainVC alloc] initWithUserName:_userNameText.text WithPassWord:_passWordText.text];
[self.navigationController pushViewController:mainVC animated:YES];
/***********初始化傳值****************/
-
VC2
-(id)initWithUserName:(NSString *)userName WithPassWord:(NSString *)passWord {
self = [super init];
if (self) {
// Custom initialization
_passWord=passWord;
_userName=userName;
}
return self;
}
2.代理傳值
-
VC1
/***********代理傳值*******************/
ZQMainVC *mainVC=[[ZQMainVC alloc]init];
self.delegate = mainVC;
if (self.delegate&&[self.delegate respondsToSelector:@selector(ViewControllerSendMessage:withPassword:)]) {
[self.delegate ViewControllerSendMessage:_userNameText.text withPassword:_passWordText.text];
}
[self.navigationController pushViewController:mainVC animated:YES];
/***********代理傳值*******************/
-
VC2 接收代理方法
#pragma mark ViewControllerDelegate
-(void)ViewControllerSendMessage:(NSString *)userName withPassword:(NSString *)password{
_userName=userName;
_passWord=password;
}
3.單例傳值
-
VC1
// 申明初始化單例類的對象
ZQShareManager *shareManager = [ZQShareManager shareUserInfo];
_userNameText.text = shareManager.userName;
_passWordText.text = shareManager.password;
-
單例方法 .h
#import <Foundation/Foundation.h>
@interface ZQShareManager : NSObject
@property (copy, nonatomic) NSString *userName;
@property (copy, nonatomic) NSString *password;
// 申明一個類方法
+ (ZQShareManager *)shareUserInfo;
@end
-
單例方法 .m
#import "ZQShareManager.h"
@implementation ZQShareManager
+ (ZQShareManager *)shareUserInfo{
static ZQShareManager *shareManager = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
shareManager = [[self alloc] init];
});
return shareManager;
}
@end
-
VC2
// 正向傳值,直接從單例類里面讀取數據
ZQShareManager *shareManager = [ZQShareManager shareUserInfo];
_userName = shareManager.userName;
_passWord = shareManager.password;
4.屬性傳值
-
VC1
需要import 頭文件
/***********屬性傳值*******************/
ZQMainVC *mainVC=[[ZQMainVC alloc]init];
mainVC.userName=_userNameText.text;
mainVC.passWord=_passWordText.text;
[self.navigationController pushViewController:mainVC animated:YES];
/***********屬性傳值*******************/
-
VC2
.h 文件聲明屬性
#import <UIKit/UIKit.h>
@interface ZQMainVC : UIViewController
@property(nonatomic,strong)NSString *userName;
@property(nonatomic,strong)NSString *passWord;
5.通知傳值
-
VC1
發送通知
/***************通知傳值****************/
NSArray *array=[[NSArray alloc]initWithObjects:_userNameText.text,_passWordText.text, nil];
//發送通知 sendMessage表示通知詳情 array表示傳輸數據
[[NSNotificationCenter defaultCenter] postNotificationName:@"ZQSendMessage" object:array];
/*****************通知傳值****************/
[self.navigationController popToRootViewControllerAnimated: YES];
-
VC2
接收通知
/*****通知*********/
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getZQMessage:) name:@"ZQSendMessage" object:nil];
/*****通知************/
-(void)getZQMessage:(NSNotification *)notification{
NSArray *array=[[NSArray alloc]initWithArray:notification.object];
_userNameText.text=array[0];
_passWordText.text=array[1];
}
6.block傳值
-
VC1 (兩種方法)
ZQResignVC *resignVC=[[ZQResignVC alloc]init];
//直接定義block
resignVC.block=^(NSArray *array){
_userNameText.text=array[0];
_passWordText.text=array[1];
};
//通過方法
[resignVC sendMessage:^(NSArray *array) {
_userNameText.text=array[0];
_passWordText.text=array[1];
}];
[self.navigationController pushViewController:resignVC animated:YES];
-(void)sendMessage:(myBlcok)block{
self.block=block;
}
-
VC2 (.h文件)
#import <UIKit/UIKit.h>
// block格式: 返回值(^block名字)(參數)
// (1)定義block
typedef void(^myBlcok)(NSArray *array);
@interface ZQResignVC : UIViewController
// (2)申明block屬性
@property (strong, nonatomic) myBlcok block;
-(void)sendMessage:(myBlcok)block;
@end
7.AppDelegate傳值 (全局方法 不推薦)
需要導入#import "AppDelegate.h"
-
AppDelegate.h文件
// 申明數據源數組保存所需要的數據
@property (strong, nonatomic) NSArray *dataArray;
-
VC1
// 獲取AppDelegate對象
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
if (appDelegate.dataArray == nil)
{
appDelegate.dataArray = [[NSArray alloc] init];
}
appDelegate.dataArray = [NSArray arrayWithObjects:_userNameText.text,_passWordText.text, nil];
[self.navigationController popToRootViewControllerAnimated: YES];
-
VC2
- (void)viewDidAppear:(BOOL)animated
{
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
_userNameText.text = (NSString *)appDelegate.dataArray[0];
_passWordText.text = (NSString *)appDelegate.dataArray[1];
[super viewDidAppear:animated];
}
8.NSUserDefault傳值 (系統自帶)
-
VC1
/***********NSUserDefaults傳值****************/
[[NSUserDefaults standardUserDefaults]setValue:_userNameText.text forKey:@"UserId"];
[[NSUserDefaults standardUserDefaults]setValue:_passWordText.text forKey:@"PassWord"];
//將緩存中的數據強制寫入磁盤
[[NSUserDefaults standardUserDefaults]synchronize];
ZQMainVC *mainVC=[[ZQMainVC alloc]init];
[self.navigationController pushViewController:mainVC animated:YES];
/***********NSUserDefaults傳值****************/
-
VC2
/**************NSUserDefaults傳值**************/
self.userName=[[NSUserDefaults standardUserDefaults]objectForKey:@"UserId"];
self.passWord=[[NSUserDefaults standardUserDefaults]objectForKey:@"PassWord"];
/************NSUserDefaults傳值**********/