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