传值方式(正向传值) 代理 block块 通知

2024-06-08 22:18

本文主要是介绍传值方式(正向传值) 代理 block块 通知,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

(前提要求都是把第二个页面的只传给第一个页面)

1.代理 一对一

在第二个页面设置代理  

1.1在最上方设置 

//选择房间的代理

@protocol RoomVCDelegate <NSObject>

1.2设置代理方法

// 方法

-(void)selectRoomName:(NSString *)name;

1.3定义委托对象

@property (nonatomic,assign)id<RoomVCDelegate>delegate;

在第一个页面(添加代理方法)

需要设置 代理对象

self.delegate= self;

调用代理方法 把传值对象赋值

-(void)selectRoomName:(NSString *)name{

最后就是把要穿的值(在第二个界面调用 )

[_delegateselectRoomName:@"文化轩"];


2.block块 一对一(优点   高效快速)

首先 在第二个界面定义一个block块
两种定义block的方式
第一种定义方式

@property (nonatomic,copy)void (^backValues)(NSString *str);

在第二个页面定义完后  把值付给block方法

self.backValues(@"大歌星");

在第一个页面  获取到第二个页面的对象  这个时候就只能用self获取  第一个页面的ui控件

Vc.backValues=^(NSString *str){

        [self.buttonsetTitle:strforState:UIControlStateNormal];

    };


使用block是应注意以下几个方面 以下几个例子

__block是用空间的    因为是一步的必须用__block

  __blockUIImage *image1 =nil;

//__weak避免循环引用

   __weakViewController *weakSelf =self;

    dispatch_group_async(group, groupT, ^{

        image1 = [weakSelf downloadImage:@"http://a.hiphotos.baidu.com/image/pic/item/8644ebf81a4c510f19c75c136259252dd42aa5bc.jpg"];

    });

    __blockUIImage *image2 =nil;

    __weakViewController *weakSelf2 =self;

    dispatch_group_async(group, groupT, ^{

        image2 = [weakSelf2 downloadImage:@"http://a.hiphotos.baidu.com/image/pic/item/8644ebf81a4c510f19c75c136259252dd42aa5bc.jpg"];

    });

//主线程就不需要用__block

    dispatch_group_notify(group,dispatch_get_main_queue(), ^{

        _image1.image = image1;

        _image2.image = image2;

    });


第二种第一方式

typedef void(^Block) (int,NSString*);

@property (nonatomic,assign)Block block;

这里两个需要连起来使用
基本和第一种写法一致 

3通知 一对多

//NSNotificationCenter defaultCente //创建通知

//添加一个响应者  通知中心 最后一个参数具体对象或者nilnil是这一类对象发生改变就会改变

        [[ NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(textChange:)name:UITextFieldTextDidChangeNotificationobject:textField];}];

object 响应者


 ////移除通知中心
        [[NSNotificationCenterdefaultCenter]removeObserver:selfname:UITextFieldTextDidChangeNotificationobject:alert.textFields.firstObject];




4.正向传值(比较简单不在详细举例)

5.storyboard 传值  利用segue 

5.1在storyboard 建立连线器

5.2在segue设置标识 

5.3根据segue找到相应的连线器

在 这个方法中

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

前提是在第二个界面需要订报告以一个全局的model模型

穿过去的是一个model模型

    if ([segue.identifier isEqualToString:@"one"]) {

        menuModel *model = [_rowArray[_currentSection]objectAtIndex:_selectRow];

        detailViewController *Vc = segue.destinationViewController;

        Vc.model = model;

    }else if ([segue.identifier isEqualToString:@"two"]){

        menuModel *model = [_rowArray[_currentSection]objectAtIndex:_selectRow];

        detailViewController *Vc = segue.destinationViewController;

        Vc.model = model;

    }

}

直接在第二个界面   用model模型去赋值

这篇关于传值方式(正向传值) 代理 block块 通知的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1043456

相关文章

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

Spring Boot读取配置文件的五种方式小结

《SpringBoot读取配置文件的五种方式小结》SpringBoot提供了灵活多样的方式来读取配置文件,这篇文章为大家介绍了5种常见的读取方式,文中的示例代码简洁易懂,大家可以根据自己的需要进... 目录1. 配置文件位置与加载顺序2. 读取配置文件的方式汇总方式一:使用 @Value 注解读取配置方式二

JAVA保证HashMap线程安全的几种方式

《JAVA保证HashMap线程安全的几种方式》HashMap是线程不安全的,这意味着如果多个线程并发地访问和修改同一个HashMap实例,可能会导致数据不一致和其他线程安全问题,本文主要介绍了JAV... 目录1. 使用 Collections.synchronizedMap2. 使用 Concurren

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

将Java程序打包成EXE文件的实现方式

《将Java程序打包成EXE文件的实现方式》:本文主要介绍将Java程序打包成EXE文件的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录如何将Java程序编程打包成EXE文件1.准备Java程序2.生成JAR包3.选择并安装打包工具4.配置Launch4

springboot上传zip包并解压至服务器nginx目录方式

《springboot上传zip包并解压至服务器nginx目录方式》:本文主要介绍springboot上传zip包并解压至服务器nginx目录方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录springboot上传zip包并解压至服务器nginx目录1.首先需要引入zip相关jar包2.然

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代