视图弹出两种的两种方法:
- 调用
presentViewController:animated:completion:
直接推出新视图。如下,其中bvc为要推出的视图的实例,类型为:(UIViewController *)
。
[self presentViewController:bvc animated:YES completion:nil];
[self dismissViewControllerAnimated:YES completion:nil];
- 通过navigationviewcontroller来推出子视图
视图切换过程中的数据传递
现在有两个视图:A视图和B视图。定义A->B为正向;B->A为反向。本文主要简述一下三种情况对应的数据传递方法。
- 正向传递数据
- 反向传递数据—非代理方式
- 反向传递数据—代理方式
正向数据传递
功能描述:A视图通过TextField传值给B视图,并在B视图中显示传递的值。此外,A视图包含跳转按钮,B视图包含返回按钮
实现方法:
0. 公有属性:BVC中新增公有属性,用于接收A传递的消息。
1. A视图控制器中获取B视图的实例。
2. A中赋值给B视图实例的公有属性。
3. B中接收A传来的数据,也即B自身的公有属性。
实例代码(完整代码点这里):
- A视图的跳转动作
- (IBAction)presentToBVC:(id)sender {
//获取BVC的实例,并赋值给BVC的公有属性
BVController *bvc = [[BVController alloc]initWithNibName:@"BVController" bundle:nil];
bvc.messageFromAVC = self.fromAVCtoBVCText.text;
//跳转动作
[self presentViewController:bvc animated:YES completion:nil];
}
- B视图的接收动作
- (void)viewDidLoad {
[super viewDidLoad];
// 接收数据
self.showSelfLabel.text=self.messageFromAVC;
}
反向传递数据
功能描述:B视图通过TextField传值给A视图,并在A视图中显示传递的值。此外,A视图包含跳转按钮,B视图包含返回按钮
非代理方式的实现方法:
- 公有属性:A视图新增公有属性
(NSString *)
用于接收B返回时传递的消息;B视图新增公有属性(AVC *)
用于反向赋值实例引用。 - 跳转动作:A视图中创建B的实例,并将自身传递给B的公有属性(其返回类型是A)
- 赋值动作:B视图消失前(viewdisappear)前,将消息赋值给A的公有属性。
- 显示动作:A视图在将要呈现(viewappear)前,将B传递的消息赋予给Label属性,用于显示。
代码实现(完整代码点这里):
- 公有属性设置
A视图中定义
@property (nonatomic,strong) NSString *messageOfBVC;
B视图定义
@property (nonatomic,strong) AVController *aViewController;
- 跳转动作
- (IBAction)presentToBVC:(id)sender {
BVController *bvc = [[BVController alloc]initWithNibName:@"BVController" bundle:nil];
bvc.aViewController = self;
[self presentViewController:bvc animated:YES completion:nil];
}
- 赋值动作
-(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
//消失前赋值
self.aViewController.messageOfBVC = self.messageFromBToAVCText.text;
}
- 显示动作
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.labelOfBvc.text = self.messageOfBVC;
}
代理方式的实现方法:
- 首先定义代理方和委托方。这里A是代理方,B是委托方。A要接受B的返回数据,B委托A去处理。
- 委托方做的事:
a. 定义协议。协议名称一般为:类名+Delegate
b. 定义方法。方法的第一个参数一般为委托方自身。
c. 在合适的时机,发送消息给代理方。 - 代理方做的事:
a. 遵守协议
b. 实现方法
c. 将自身设置为委托方的代理
实例代码点这里。