iOS开发基础 - 数值传递

1.正向传值 — 属性传值/方法传值

SecondViewController *secondVC = [[SecondViewController alloc]init];
NSString *str = @"hello";

2.反向传值

     1.代理
//主动方 要传递值的一方
    //1.声明协议
    @protocol giveDataDelegate <NSObject>
    //2.拟定一个方法  被动方需要什么 参数就是什么
    - (void)giveDataFrom:(NSString *)str andColor:(UIColor *)color;
    @end
    @interface NextViewController : UIViewController
    //3.声明一个持有协议的id指针  属性修饰符weak/assign
    @property (nonatomic,weak) id<giveDataDelegate>delegate;
     //传递数值
    [self.delegate giveDataFrom:@"I AM BACK" andColor:[UIColor yellowColor]];

//接收数据方
//1.遵守协议
     @interface ViewController ()<giveDataDelegate>
//2.实现协议方法
    - (void)giveDataFrom:(NSString *)str andColor:(UIColor *)color{
    //主动方要求被动方要做的事情
    …
    }
//3.设置代理
    nextVC.delegate = self;

     2.block
 //主动方 要传递值的一方
    //typedef 定义一个新的类型 名字ColorBlock
        typedef void(^ColorBlock)(NSString *,UIColor *);
        @property (nonatomic,copy) ColorBlock block;

  //接收数据方
    NextViewController *nextVC = [[NextViewController alloc]init];
    nextVC.block = ^(NSString *str , UIColor *color){
        //主动方让被动方做的事情
        //数据回调回来之后 需要处理的事情
        …
    };

3.使用单例传值

+(SingleClass *)defaultSingle{
    //首先需要一个静态变量  初始值是nil
    static SingleClass *obj = nil;//可以拿到上一次的值  //当第二次....第n次调用这个方法 obj值就是第一次创建的对象的指针xxxxx000000  静态变量相当于全局变量 程序退出时静态变量才会消失  也可以放在外面
    //判断
    if (obj == nil) {
        ///如果为空 创建对象
        obj = [[SingleClass alloc]init];
    }
    return obj;//xxxxx000000
}

4.通知中心

//发送数据方
//通知中心 只有一个 --- 单例对象
//拿到通知中心
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];

//发布通知(发送消息)
[center postNotificationName:@"频道1" object:nil userInfo:@{@"label":@"爸爸回来了"}];

//[center postNotificationName:@"频道1" object:@"爸爸去哪了"];
//要传递的数据设置成字典的value

//接收数据方
//拿到通知中心
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];

//注册监听者(观察者)
[center addObserver:self selector:@selector(changeLabel:) name:@"频道1" object:nil];//object通常是nil
//Observer 通过 name(频道) 接收数据 接收成功调用selector

- (void)changeLabel:(NSNotification *)noti{
NSLog(@"第二个界面:名字 %@ 发布者 %@ 数据 %@",noti.name,noti.object,noti.userInfo);
UILabel *label = (id)[self.view viewWithTag:200];
label.text = noti.userInfo[@"label"];
}
//移除掉所有监听器
[[NSNotificationCenter defaultCenter] removeObserver:self];


实例:键盘收放

    —系统自动发布通知   

//注册  监听键盘弹起的时候
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
//注册  监听键盘落下的时候
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHidden:) name:UIKeyboardWillHideNotification object:nil];

//键盘将要弹起
- (void)keyboardWillShow:(NSNotification *)noti{

    //拿到键盘弹起的时间  时间是秒
    NSTimeInterval interval = [noti.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
    // NSNumber of double

    //拿到键盘弹起后的Rect
    NSValue *value = noti.userInfo[UIKeyboardFrameEndUserInfoKey];
    //NSValue of CGRect
    //非对象类型用getValue来提取
    CGRect rect = [value CGRectValue];


    [UIView animateWithDuration:interval animations:^{

        UIView *redView = (id)[self.view viewWithTag:100];
        CGRect redRect = redView.frame;
        //屏幕高度 - 键盘高度 - 自身高度
        redRect.origin.y = [UIScreen mainScreen].bounds.size.height - rect.size.height - redRect.size.height;
        redView.frame = redRect;
    }];

}
  1. 单例对象
    uiwindows
    // AppDelegate 也是一个单例
    // NSFileManager //文件管理
    // NSNotificationCenter //通知中心
    // UIApplication
    // NSUserDefaults //应用程序设置
    // NSURLCache //url缓存
    // NSHTTPCookieStorage 应用程序cookies池
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值