• 传值 属性 block 单例 协议


    界面传值

    四种传值的方式

    1、属性传值(从前往后)

    步骤:

     1、属性传值用于第一个界面向第二个界面传值

     2、明确二者联系的桥梁,也就是触发跳转的地方

     3、明确传输的值,类型是什么

     4、在第二个视图控制器内部声明相对应类型的属性,来接受传输的值

     5、在第二个界面使用传入的值

    2、代理传值(从后往前)

    步骤:

    1、声明协议

    UI中的协议名称 为 当前类名 + Delegate

    @protocol FourViewControllerDelegate<NSObject>

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

    - (void)pushValue1:(UIColor *)color;

    @end

    2、声明代理

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

    3、让代理执行方法(在页面跳转处)

    //判断代理人不为空,并且代理人响应了协议中的方法

     if (self.delegate != nil && [self.delegate respondsToSelector:@selector(pushValue:)]) {

            [self.delegate pushValue:self.textField.text];

            [self.delegate pushValue1:self.view.backgroundColor];

        }

    4、指定代理人为自身

    - (void)button {

        FourViewController *four = [[FourViewController alloc] init];

        //4、指定代理对象为自己

        four.delegate = self;

        [self.navigationController pushViewController:four animated:YES];

       

        

    }

    5、接受协议

    @interface ThirdViewController : UIViewController<FourViewControllerDelegate>

    6、实现协议方法

    - (void)pushValue:(NSString *)text {

        _lable.text  = text;

    }

    - (void)pushValue1:(UIColor *)color{

        self.view.backgroundColor = color;

    }

    3、block传值(从后往前)

    有两种方式:

    一、使用block属性实现回调传值

    步骤:

    1、定义需要传的值得类型

    typedef void (^Bada)(NSString *);

    typedef void  (^Color) (UIColor *);

    2、将Bloak声明成属性必须用copy修饰

    @property (nonatomic, copy) Bada bada;

    @property (nonatomic, copy) Color color;

    3、

    - (void)button {

        //执行Block

        if (self.bada != nil) {

        self.bada(self.textField.text);

        }

        

        if (self.color != nil) {

            self.color (self.view.backgroundColor);

        }

        [self.navigationController popToRootViewControllerAnimated:YES];

        

    }

    4、对block进行实现

    SecondViewController *second = [[SecondViewController alloc] init];

        

        second.bada = ^(NSString *str) {

            self.lable.text = str;

        };

        second.color = ^(UIColor *color) {

            self.view.backgroundColor = color;

        };

        [self.navigationController pushViewController:second animated:YES];

    方式二:在方法中定义block实现回调传值

    步骤:

    1、在First.h文件中,重定义void(^)(NSString *string)类型 的别名为FirstBlock
    typedef void(^FirstBlock)(NSString *string); 

    2、声明方法,在方法中封装block 

    -(void)sendNumber:(NSInteger )number andBlock: (FirstBlock)block; 

    3、在First.m实现 法,并执 block

     -(void)sendNumber:(NSInteger )number andBlock: (FirstlBlock)block;

        NSString *string = [NSString

    stringWithFormat:@"%ld",number];

        block(string);

    }

    4、 执行放法,实现block并接收回传过来的string值 

    First*first= [First alloc] init];

     //执行方法

    [first sendNumber:12243432 andBlock:^(NSString 

    *string) {

            self.label.text = string;

    }]; 

    4、单例传值(可用于从第一页面直接传值给第十个页面,既可以从前往后,也可以从后往前)

    步骤:

    1、创建一个类继承自NSObject,在.h文件中声明一个类方法。

    //单利方法是类方法, 返回值类型为instancetype

    //自己定义的单例类,方法名通常都是以share开头

    + (instancetype)shareInstance;

    2、在.m文件中写类方法的实现

    static Handler *handler = nil;

    @implementation Handler

    //怎么保证 创建的 当刘对象是唯一的?

    + (instancetype)shareInstance {

        

        @synchronized(self) {//加锁,保证创建过程同一时间内只允许一个线程对象访问,保证其唯一性(self 任意对象)

            

        if (handler == nil) {

           handler = [[Handler alloc] init];

        }

            

        }

        return handler;

        

    }

    3、借助视图的即将出现和即将消失的方法,可以实现值得传递。(注意视图的加载和创建方法只会走一次,但是视图的将出现和即将消失的方法会走多次)

    - (void)viewWillDisappear:(BOOL)animated {

        //创建单例

        Handler *handler = [Handler shareInstance];

        handler.string= self.textField.text;

    }

    - (void)viewWillAppear:(BOOL)animated {

        Handler *handler = [Handler shareInstance];

        self.textField.text = handler.string;

    }

  • 相关阅读:
    JavaScrip 数组/字典/循环
    初识javaScript
    css内容补充之其它
    position
    css的存在形式
    CSS选择器
    Html的Head内标签
    Linux设置FQDN
    saltstack 全面介绍
    jQuery文档处理
  • 原文地址:https://www.cnblogs.com/naizui/p/5211592.html
Copyright © 2020-2023  润新知