ios 跳转数据的传递
2015-04-21 10:05
429 查看
情景1: A-->B 需要把数据传递到B里
代码:
[objc] view
plaincopy
// 跳转 -- 执行login2contacts这个segue
[self performSegueWithIdentifier:@"login2contacts" sender:nil];
在执行performSegueWithIdentifier 跳转 时,会调用prepareForSegue 方法,在prepareForSegue 中拿到ViewController 来传递数据
/**
* 执行segue后,跳转之前会调用这个方法
* 一般在这里给下一个控制器传递数据
*/
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// 1.取得目标控制器(联系人列表控制器)
UIViewController *contactVc = segue.destinationViewController;
// 2.设置标题
contactVc.title = [NSString stringWithFormat:@"%@的联系人列表", self.accountField.text];
// contactVc.title 等价于 contactVc.navigationItem.title
// contactVc.navigationItem.title = [NSString stringWithFormat:@"%@的联系人列表", self.accountField.text];
}
情景2 B—>A 当进入B时,B操作完成返回到A中,需要带回数据到A
思路,要想让B传递到A 首先创建一个代理对象,也就是新建一个协议, A来实现这个协议,那A就相当于一个代理, 然后把A的代理传入到B中,B来调用A中的协议中的方法
代码 B:
[objc] view
plaincopy
#import <UIKit/UIKit.h>
@class MJAddViewController, MJContact;
@protocol MJAddViewControllerDelegate <NSObject>
@optional
//- (void)addViewController:(MJAddViewController *)addVc didAddContactWithName:(NSString *)name phone:(NSString *)phone;
- (void)addViewController:(MJAddViewController *)addVc didAddContact:(MJContact *)contact;
@end
@interface MJAddViewController : UIViewController
@property (nonatomic, weak) id<MJAddViewControllerDelegate> delegate;
@end
/**
* 添加
*/
- (IBAction)add {
// 1.关闭当前控制器
[self.navigationController popViewControllerAnimated:YES];
// 2.传递数据给上一个控制器(MJContactsViewController)
// 2.通知代理
if ([self.delegate respondsToSelector:@selector(addViewController:didAddContact:)]) {
MJContact *contact = [[MJContact alloc] init];
contact.name = self.nameField.text;
contact.phone = self.phoneField.text;
[self.delegate addViewController:self didAddContact:contact];
}
}
A文件
@interface MJContactsViewController () <MJAddViewControllerDelegate>
/**
* 执行跳转之前会调用
* 在这个方法中,目标控制器的view还没有被创建
*/
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
id vc = segue.destinationViewController;
// 设置下一个控制器(添加联系人的控制器)的代理
MJAddViewController *addVc = vc;
addVc.delegate = self;
}
#pragma mark - MJAddViewController的代理方法
- (void)addViewController:(MJAddViewController *)addVc didAddContact:(MJContact *)contact
{
// 1.添加模型数据
[self.contacts addObject:contact];
// 2.刷新表格
[self.tableView reloadData];
}
代码:
[objc] view
plaincopy
// 跳转 -- 执行login2contacts这个segue
[self performSegueWithIdentifier:@"login2contacts" sender:nil];
在执行performSegueWithIdentifier 跳转 时,会调用prepareForSegue 方法,在prepareForSegue 中拿到ViewController 来传递数据
/**
* 执行segue后,跳转之前会调用这个方法
* 一般在这里给下一个控制器传递数据
*/
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// 1.取得目标控制器(联系人列表控制器)
UIViewController *contactVc = segue.destinationViewController;
// 2.设置标题
contactVc.title = [NSString stringWithFormat:@"%@的联系人列表", self.accountField.text];
// contactVc.title 等价于 contactVc.navigationItem.title
// contactVc.navigationItem.title = [NSString stringWithFormat:@"%@的联系人列表", self.accountField.text];
}
情景2 B—>A 当进入B时,B操作完成返回到A中,需要带回数据到A
思路,要想让B传递到A 首先创建一个代理对象,也就是新建一个协议, A来实现这个协议,那A就相当于一个代理, 然后把A的代理传入到B中,B来调用A中的协议中的方法
代码 B:
[objc] view
plaincopy
#import <UIKit/UIKit.h>
@class MJAddViewController, MJContact;
@protocol MJAddViewControllerDelegate <NSObject>
@optional
//- (void)addViewController:(MJAddViewController *)addVc didAddContactWithName:(NSString *)name phone:(NSString *)phone;
- (void)addViewController:(MJAddViewController *)addVc didAddContact:(MJContact *)contact;
@end
@interface MJAddViewController : UIViewController
@property (nonatomic, weak) id<MJAddViewControllerDelegate> delegate;
@end
/**
* 添加
*/
- (IBAction)add {
// 1.关闭当前控制器
[self.navigationController popViewControllerAnimated:YES];
// 2.传递数据给上一个控制器(MJContactsViewController)
// 2.通知代理
if ([self.delegate respondsToSelector:@selector(addViewController:didAddContact:)]) {
MJContact *contact = [[MJContact alloc] init];
contact.name = self.nameField.text;
contact.phone = self.phoneField.text;
[self.delegate addViewController:self didAddContact:contact];
}
}
A文件
@interface MJContactsViewController () <MJAddViewControllerDelegate>
/**
* 执行跳转之前会调用
* 在这个方法中,目标控制器的view还没有被创建
*/
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
id vc = segue.destinationViewController;
// 设置下一个控制器(添加联系人的控制器)的代理
MJAddViewController *addVc = vc;
addVc.delegate = self;
}
#pragma mark - MJAddViewController的代理方法
- (void)addViewController:(MJAddViewController *)addVc didAddContact:(MJContact *)contact
{
// 1.添加模型数据
[self.contacts addObject:contact];
// 2.刷新表格
[self.tableView reloadData];
}
相关文章推荐
- iOS页面跳转及数据传递
- IOS开发笔记之应用间的跳转和数据传递
- iOS页面跳转及数据传递
- 【iOS开发-数据传递】关于两个Controller跳转时的数据传递
- iOS 编辑页面的实现方法,从一个页面跳转(push)到下一页面时怎么传递数据
- iOS 编辑页面的实现方法,从一个页面跳转(push)到下一页面时怎么传递数据
- IOS 页面跳转的数据传递方式
- 【iOS界面处理】使用storyboard实现页面跳转,简单的数据传递
- 【iOS界面处理】使用storyboard实现页面跳转,简单的数据传递
- iOS开发拓展篇—应用之间的跳转和数据传递
- iOS页面跳转及数据传递
- 【iOS界面处理】使用storyboard实现页面跳转,简单的数据传递
- Swift 使用nib文件做iOS界面,在Ios界面跳转传递数据
- iOS页面跳转及数据传递
- iOS 之 跳转到新页面 2个页面间跳转和数据传递
- 【iOS界面处理】使用storyboard实现页面跳转,简单的数据传递
- iOS --- 通过openURL实现APP之间跳转并传递数据
- ios入门之界面跳转和数据传递
- iOS页面跳转及数据传递
- iOS页面跳转及数据传递