iOS-多视图(MVC)切换与代理(delegate)

视图弹出两种的两种方法:

  • 调用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视图包含返回按钮

非代理方式的实现方法:
  1. 公有属性:A视图新增公有属性(NSString *)用于接收B返回时传递的消息;B视图新增公有属性 (AVC *) 用于反向赋值实例引用。
  2. 跳转动作:A视图中创建B的实例,并将自身传递给B的公有属性(其返回类型是A)
  3. 赋值动作:B视图消失前(viewdisappear)前,将消息赋值给A的公有属性。
  4. 显示动作: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;

}
代理方式的实现方法:
  1. 首先定义代理方和委托方。这里A是代理方,B是委托方。A要接受B的返回数据,B委托A去处理。
  2. 委托方做的事:
    a. 定义协议。协议名称一般为:类名+Delegate
    b. 定义方法。方法的第一个参数一般为委托方自身。
    c. 在合适的时机,发送消息给代理方。
  3. 代理方做的事:
    a. 遵守协议
    b. 实现方法
    c. 将自身设置为委托方的代理
    实例代码点这里。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值