传值(block 协议 属性 model)

Block传值(从后向前传值)
Block的核心思想是 : 回调,Block作为属性进行传值的时候,一般使用场景是从第二个界面返回到上一个界面,基本步骤:
    1.在第二个界面中声明一个 Block 属性
    2.在第二个界面返回的那句代码之前加上 Block 需要传递的内容
    3.在一个界面推出第二个界面那句代码之前,对 Block 进行实现(即接受 Block 传递过来的内容)

第一步:声明 Block 属性 参数名要带上,因为要参与运算(写入的.h 中声明)
@property (nonatomic, copy)void(^changeViewBlock)(NSString *string);

第二步:在跳转回接收值页面之前将要传递的内容给 block 属性
- (void)popButtonActioon
{
   
  第二步:将要传递的内容通过属性 block 传给它
      self.changeViewBlock(self.textfield.text);
跳转会接收值页面 
[self.navigationController popViewControllerAnimate d:YES];
}
在接收值页面接收 block 传过来的值(在 push 过去之前接收)
- (void)pushButtonAction
{
      SecondViewController *secondVC = [[SecondViewController alloc]init];
      secondVC.concent = self.showTextLabel.text;
          __weak 可以改成弱引用,防止重复引用
          __weak typeof(self) weakSelf = self;

      第三步:实现 block 的内容(接受传递过来的内容)
      secondVC.changeViewBlock = ^(NSString *string){
              weakSelf.showTextLabel.text = string;
      };
     
      [self.navigationController pushViewController:secondVC animated:YES];
     
    }
第二种 block 传值
总结:Block 作为方法参数传值应用场景:一般是在处理数据的 Model进行使用;具体步骤:
      1.对 Block 进行 typedef
      2.声明方法使Block 作为方法参数
      3.实现声明的方法,将要传递的内容传递出去
      4.实现 Block 的回调

  第一步 :Block 的重定义

typedef void(^AppDateSourceBlock)(NSString *string);

@interface AppDateSource : NSObject
  第二步:声明方法,让 Block 作为方法参数
- (void)sendMassage:(NSString *)string(这个地方写什么类型的就传什么类型的) andBlock:(AppDateSourceBlock)block;

@end

#warning 第三步:实现 Block 作为方法参数的那个方法
- (void)sendMassage:(NSString *)string andBlock:(AppDateSourceBlock)block
{
      NSString *string1 = [NSString stringWithFormat:@"%@",string];
     
      block(string1);
     
}
- (void)sendMassageAction
{
#warning 第四步:Block 回调,即实现 Block
      AppDateSource *dataBlock = [[AppDateSource alloc]init];
  [dataBlock sendMassage:@"hello" andBlock:^(NSString *string) {
             
              self.showTextLabel.text = string;
      }];
}




协议传值(从后往前传)
      总结:属性传值:一般使用从前往后进行传值的情况
      如果从后往前,需要借助其他传值方式即 block 传值  协议传值方式
 
       
        * 实现协议的六个步骤
     
        第一步:声明协议
        第二步:声明代理⼈
        第三步:执⾏协议方法
        第四步:签订协议
        第五步:指定代理人
        第六步:实现协议方法
     
    第一步:声明协议(值写入的.h)
@protocol SecondViewControllerNele gate

- (void)changeValue:(NSString *)text;

@optional //可选的协议方法

- (void)changeColor:(UIColor *)color;
@end

  第二步:声明代理人(值写入的.h)
///第二个 controller 中的协议
@property (nonatomic, assign)idsecondViewControllerNe legate;
pop事件中
- (void)backButtonAction
{
    第三步:执行相关的协议方法(值写入的.m)
      [self.secondViewControllerNele gate changeValue:self.textField.text];
      [self.navigationController popViewControllerAnimate d:YES];
   
}
  第四步:签订协议(接收值的.m)
@interface RootViewController ()

- (void)pushNextController
{
      SecondViewController *secondVC = [[SecondViewController alloc]init];
【****属性传值从前往后传值
(显示文本输入框的内容的文本
@property (strong, nonatomic)NSString *content;)(值写入的.h) 
【就写在这个点击事件中】
需要把 label 的 text传给
    secondVC.content = self.showTextLable.text;

     在viewDidLoad中接收值
     textField.text = self.content;
)】


  第五步 指定代理人
     
  secondVC.secondViewControllerNele gate = self;//指定代理人
     
  [self.navigationController pushViewController:secondVC animated:YES];
     
}
  第六步 实现协议的方法(接收值的.m)
- (void)changeValue:(NSString *)text
{
      self.showTextLable.text = text;
}


****model 传值
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
     
    取出下标
    NSIndexPath *indexPath =  [self.tableView indexPathForSelectedRow];
storyboard 创建控制器    
CellViewController *cell = [segue destinationViewControlle r];
将解析出来的值赋给接收方的 model (同一个 model,在两个类中声明属性以达到传值的作用)属性
    cell.model = self.array1[indexPath.row];

    // Get the new view controller using [segue destinationViewControlle r].
      // Pass the selected object to the new view controller.
}



 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值