码迷,mamicode.com
首页 > 移动开发 > 详细

iOS UI-界面传值(三种方法)

时间:2016-01-08 18:37:52      阅读:822      评论:0      收藏:0      [点我收藏+]

标签:

 

 1 #import <Foundation/Foundation.h>
 2 
 3 @interface DataModel : NSObject
 4 
 5 @property (nonatomic, copy) NSString *name;
 6 @property (nonatomic, copy) NSString *address;
 7 
 8 @end
 9 
10 #import "DataModel.h"
11 
12 @implementation DataModel
13 
14 @end

 

  1 #import <UIKit/UIKit.h>
  2 @class DataModel;
  3 //设置协议
  4 @protocol PassValueDelegate <NSObject>
  5 - (void) passValueFromFirstVCToSecondVC:(DataModel *) dataModel;
  6 @end
  7 
  8 @interface FirstViewController : UIViewController
  9 //设置代理
 10 @property (nonatomic, strong) id<PassValueDelegate> delegate;
 11 //设置通知传值接受者
 12 @property (nonatomic, strong) DataModel *firstNOtificationModel;
 13 //设置代理传值传值者
 14 @property (nonatomic, strong) DataModel *firstDelegateModel;
 15 
 16 @end
 17 
 18 
 19 #import "FirstViewController.h"
 20 #import "DataModel.h"
 21 #import "SecondViewController.h"
 22 
 23 
 24 @interface FirstViewController ()
 25 //设置接收通知传值的标签
 26 @property (nonatomic, strong)UILabel *label;
 27 //设置接收block传值的标签
 28 @property (nonatomic, strong)UILabel *lblBlock;
 29 
 30 @end
 31 
 32 @implementation FirstViewController
 33 
 34 - (void)viewDidLoad {
 35     [super viewDidLoad];
 36     [self.view setBackgroundColor:[UIColor orangeColor]];
 37     
 38     [self createButtonAndLabel];
 39     
 40     //创建观察者
 41     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveValue:) name:@"passValueFromSecondVCToFirstVC" object:nil];
 42 }
 43 
 44 
 45 #pragma mark - 创建按钮和标签
 46 - (void)createButtonAndLabel
 47 {
 48     //创建标签
 49     self.label = [[UILabel alloc] initWithFrame:CGRectMake(10, 200, 355, 60)];
 50     [self.label setBackgroundColor:[UIColor redColor]];
 51     self.label.textAlignment = NSTextAlignmentCenter;
 52     [self.view addSubview:self.label];
 53     
 54     //创建标签
 55     self.lblBlock = [[UILabel alloc] initWithFrame:CGRectMake(10, 420, 355, 60)];
 56     [self.lblBlock setBackgroundColor:[UIColor redColor]];
 57     self.lblBlock.textAlignment = NSTextAlignmentCenter;
 58     [self.view addSubview:self.lblBlock];
 59 
 60     //创建按钮
 61     UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
 62     [btn setFrame:CGRectMake(80, 300, 215, 80)];
 63     [btn setBackgroundColor:[UIColor blackColor]];
 64     [btn setTitle:@"goToNextView" forState:UIControlStateNormal];
 65     [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
 66     [btn addTarget:self action:@selector(goToNextView) forControlEvents:UIControlEventTouchUpInside];
 67     [self.view addSubview:btn];
 68 }
 69 
 70 #pragma mark - 观察者接收值关联方法
 71 - (void)receiveValue:(NSNotification *)notification
 72 {
 73     if ([notification.object isKindOfClass:[DataModel class]]) {
 74         self.firstNOtificationModel = notification.object;
 75         self.label.text = [NSString stringWithFormat:@"name:%@ address:%@",self.firstNOtificationModel.name,self.firstNOtificationModel.address];
 76     }
 77 }
 78 #pragma mark - 代理传值、block接收值
 79 //按钮关联方法
 80 - (void)goToNextView
 81 {
 82     SecondViewController *secondVC = [[SecondViewController alloc] init];
 83     [self presentViewController:secondVC animated:YES completion:nil];
 84     
 85     [secondVC setBlock:^(DataModel *dataModel){
 86         self.lblBlock.text = [NSString stringWithFormat:@"name:%@ address:%@",dataModel.name,dataModel.address];
 87     }];
 88     
 89     self.delegate = secondVC;
 90     if ([self.delegate respondsToSelector:@selector(passValueFromFirstVCToSecondVC:)]) {
 91         [self.delegate performSelector:@selector(passValueFromFirstVCToSecondVC:) withObject:self.firstDelegateModel];
 92     }
 93 }
 94 
 95 #pragma mark - 懒加载
 96 - (DataModel *)firstDelegateModel
 97 {
 98     if (!_firstDelegateModel) {
 99         _firstDelegateModel = [[DataModel alloc] init];
100         _firstDelegateModel.name = @"GuYu";
101         _firstDelegateModel.address = @"AnHui";
102     }
103     return _firstDelegateModel;
104 }
105 
106 @end

 

 1 #import <UIKit/UIKit.h>
 2 #import "FirstViewController.h"
 3 @class DataModel;
 4 //定义block类型
 5 typedef void(^Block)(DataModel *dataModel);
 6 
 7 @interface SecondViewController : UIViewController <PassValueDelegate>
 8 //通知传值的传值者
 9 @property (nonatomic, strong) DataModel *secondNotificationModel;
10 //代理传值的接受者
11 @property (nonatomic, strong) DataModel *secondDelegateModel;
12 //block的接受者
13 @property (nonatomic, strong) Block block;
14 
15 @end
16 
17 
18 #import "SecondViewController.h"
19 #import "DataModel.h"
20 
21 @interface SecondViewController ()
22 
23 @property (strong, nonatomic) UILabel *label;
24 
25 @end
26 
27 @implementation SecondViewController
28 - (void)viewDidLoad {
29     [super viewDidLoad];
30     [self.view setBackgroundColor:[UIColor groupTableViewBackgroundColor]];
31     
32     [self createButtonAndLabel];
33 }
34 #pragma mark - 创建标签和按钮
35 - (void)createButtonAndLabel
36 {
37     //创建标签
38     self.label = [[UILabel alloc] initWithFrame:CGRectMake(10, 200, 355, 60)];
39     [self.label setBackgroundColor:[UIColor redColor]];
40     self.label.textAlignment = NSTextAlignmentCenter;
41     [self.view addSubview:self.label];
42 
43     //创建按钮
44     UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
45     [btn setFrame:CGRectMake(80, 300, 215, 80)];
46     [btn setBackgroundColor:[UIColor blackColor]];
47     [btn setTitle:@"goToBack" forState:UIControlStateNormal];
48     [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
49     [btn addTarget:self action:@selector(goToBack) forControlEvents:UIControlEventTouchUpInside];
50     [self.view addSubview:btn];
51     
52 }
53 #pragma mark - block传值、通知传值
54 //按钮关联方法
55 - (void)goToBack
56 {
57     [self dismissViewControllerAnimated:YES completion:nil];
58     
59     //block传值
60     self.block(self.secondNotificationModel);
61     
62     //通知传值
63     [[NSNotificationCenter defaultCenter] postNotificationName:@"passValueFromSecondVCToFirstVC" object:self.secondNotificationModel];
64 }
65 
66 #pragma mark - 代理协议方法
67 - (void)passValueFromFirstVCToSecondVC:(DataModel *)dataModel
68 {
69     self.secondDelegateModel = dataModel;
70     self.label.text = [NSString stringWithFormat:@"name:%@ address:%@",self.secondDelegateModel.name,self.secondDelegateModel.address];
71 }
72 
73 #pragma mark - 懒加载
74 //初始化_secondNotificationModel
75 - (DataModel *)secondNotificationModel
76 {
77     if (!_secondNotificationModel) {
78         _secondNotificationModel = [[DataModel alloc] init];
79         _secondNotificationModel.name = @"Bowen";
80         _secondNotificationModel.address = @"China";
81     }
82     return _secondNotificationModel;
83 }
84 //初始化self.block
85 - (void)setBlock:(Block)block
86 {
87     _block = block;
88 }
89 
90 
91 @end

 

iOS UI-界面传值(三种方法)

标签:

原文地址:http://www.cnblogs.com/oc-bowen/p/5113925.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!