iOS 4种传值总结

来源:互联网 发布:s7-300plc编程实例 编辑:程序博客网 时间:2024/04/29 18:52
1.正向传值

场景:  

        A界面 创建 B界面

        A-Value 》》》》》B-Value

        利用属性传值:在B类中创建属性@property (copy , nonatomic)NSString *str;

                                  然后在A中给B的对象的str赋值:

                                  BViewController *bvc = [[BViewController alloc] init];
                                   bvc.userName = ws.usernameTextField.text;     /****正向传值****/

                                

2.反向传值
场景:
    A界面 创建 B界面
    A-Value 《《《《《《B-Value
    实例:配置界面中字体大小传回到A界面

block:

1).BviewController.h里定义block属性

@property (nonatomic , copy) void (^blockName)(参数类型 *参数名);

2).BviewController.m里给block提供值

self.blockName(参数);

3).在AviewController.m里,创建B的对象,

BviewController *bvc = [[BviewController alloc] init];

bvc.blockName = ^void(参数){

       需要被赋值的属性 = 参数;

};





3.单例传值
场景:
    一个数据需要被多个界面访问,把这个数据存储到单例中
    注意:可以吧用户信息存入到单例中

    好处:任意界面中存储,任何界面获取

1).创建一个单例类

UserInfo.h中添加若干属性

@property (nonatomic , copy) NSString *username;
@property (nonatomic , copy )NSString *password;
@property (nonatomic ) BOOL isLogin;
@property (nonatomic , copy) NSString *money;

2).再创建一个类UserManager,获取单例类的对象

UserManager.h

#import <Foundation/Foundation.h>
#import "UserInfo.h"
@interface UserManager : NSObject
//获取这个类的单例对象
//注意:这个方法获取的对象是唯一的,每次获取同一个对象
+ (instancetype)manager;
@property (strong , nonatomic) UserInfo *userInfo;
@end

在任意一个界面中

            UserManager *manager = [UserManager manager];
            manager.userInfo.isLogin = YES;
            manager.userInfo.username = self.usernameTextField.text;

        (如果在block中,需要在block外: 

          __weak typeof(self) ws = self;    )
            manager.userInfo.password = self.passwordTextField.text;

在另一个任意界面中,获取这个单例类对象

    self.title =[NSString stringWithFormat:@"%@",[UserManager manager].userInfo.username];





4.通知传值
    场景:一个界面发出消息,其他多个界面同时相应
    实例:配偶之界面切换主题,其他多有界面切换主题

    注意:与其他传值不同,一处发出通知,其他多出同时响应。

(只能给已创建的View传值)


1 0
原创粉丝点击