B ----> A 传值
步骤:
1.写协议
2.添加代理属性
3.调用代理人 方法
4.给代理人添加协议
5.设置代理人
6.实现协议方法
代码例子:
SecondViewController.h
//
// SecondViewController.h
// 协议传值
//
// Created by 萨斯辈的呼唤 on 14-6-13.
// Copyright (c) 2014年 萨斯辈的呼唤. All rights reserved.
//
#import <UIKit/UIKit.h>
// 1.协议传值
// 协议由后面的视图控制器指定
@protocol SecondDelegate <NSObject>
// 传值协议的方法需要带一个或多个参数
- (void)passValueWithString:(NSString *)string;
@end
@interface SecondViewController : UIViewController
// 2.设置自己的代理人属性
@property (nonatomic, assign) id<SecondDelegate> delegate;
@end
SecondViewController.m
//
// SecondViewController.m
// 协议传值
//
// Created by 萨斯辈的呼唤 on 14-6-13.
// Copyright (c) 2014年 萨斯辈的呼唤. All rights reserved.
//
#import "SecondViewController.h"
@interface SecondViewController ()
@end
@implementation SecondViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(20, 200, 200, 40);
[button setTitle:@"hello" forState:UIControlStateNormal];
[button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
}
- (void)buttonClick:(UIButton *)button
{
[self.delegate passValueWithString:@"liguicai"];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
FirstViewController.h
//
// FirstViewController.h
// 协议传值
//
// Created by 萨斯辈的呼唤 on 14-6-13.
// Copyright (c) 2014年 萨斯辈的呼唤. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "SecondViewController.h"
// 4.由第一个viewController 签订 第二个viewController的协议
@interface FirstViewController : UIViewController <SecondDelegate>
@end
FirstViewController.m
//
// FirstViewController.m
// 协议传值
//
// Created by 萨斯辈的呼唤 on 14-6-13.
// Copyright (c) 2014年 萨斯辈的呼唤. All rights reserved.
//
#import "FirstViewController.h"
#import "SecondViewController.h"
@interface FirstViewController ()
@end
@implementation FirstViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 120, 200, 40)];
label.backgroundColor = [UIColor grayColor];
label.text = @"adfasdf";
label.tag = 11111;
[self.view addSubview:label];
[label release];
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(10, 250, 200, 40);
[button setTitle:@"hello" forState:UIControlStateNormal];
button.backgroundColor = [UIColor redColor];
[button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
}
- (void)buttonClick:(UIButton *)btn
{
SecondViewController *secondVC = [[SecondViewController alloc] init];
// 5.给第二个viewController 指定代理人
secondVC.delegate = self;
[self.navigationController pushViewController:secondVC animated:YES];
[secondVC release];
}
// 6.实现协议方法
- (void)passValueWithString:(NSString *)string
{
NSLog(@"%@", string);
UILabel *label = (UILabel *)[self.view viewWithTag:11111];
label.text= string;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end