代理传值 是用于反向传值
1.创建协议 及协议方法 在反向传值的页面(SecondVC)中
2.创建协议类型 的属性 在(SecondVC)中创建属性 id<XXXPostValueDelegate> delegate
3.调用属性 即delegate 在(SecondVC)页面中的 对象传值的方法调用 [self.delegate postValue:self.MyText.text];
4.在第一页 即显示修改信息的页面 遵循协议 实现协议方法 指定代理对象 (即 在页面传递参数的方法中为代理赋值 second.delegate=self;)
#import <UIKit/UIKit.h>
#import "FirstViewController.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@end
#import "AppDelegate.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
FirstViewController *first=[[FirstViewController alloc] init];
self.window.rootViewController=first;
return YES;
}
#import <UIKit/UIKit.h>
#import "SecondViewController.h"
@interface FirstViewController : UIViewController<UITextFieldDelegate,PostValueDeledate>
@property(strong,nonatomic) UITextField *MyText;
@property(strong,nonatomic) UIButton *MyButton;
@end
#import "FirstViewController.h"
@interface FirstViewController ()
@end
@implementation FirstViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"106.jpg"]];
self.MyText=[[UITextField alloc] initWithFrame:CGRectMake(100, 100, 200, 50)];
self.MyText.delegate=self;
self.MyText.borderStyle=1;
[self.view addSubview:self.MyText];
//初始化按钮
self.MyButton=[[UIButton alloc] initWithFrame:CGRectMake(150, 200, 100, 50)];
//给按钮添加背景色
self.MyButton.backgroundColor=[UIColor redColor];
[self.MyButton setTitle:@"next" forState:UIControlStateNormal];
[self.MyButton addTarget:self action:@selector(NextPage) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:self.MyButton];
}
-(void)NextPage
{
SecondViewController *second=[[SecondViewController alloc] init];
//指定代理
second.delegate=self;
second.MyStr=self.MyText.text;
[self presentViewController:second animated:YES completion:
^{
NSLog(@"下一页");
}];
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
//隐藏键盘
if ([self isFirstResponder])
{
[self resignFirstResponder];
}
return YES;
}
//4.在第一页 即显示修改信息的页面 遵循协议 实现协议方法 指定代理对象 (即 在页面传递参数的方法中为代理赋值 second.delegate=self;)
-(void)PostValue:(NSString *)Infor
{
self.MyText.text=Infor;
}
#import <UIKit/UIKit.h>
//1.创建协议 及协议方法 在反向传值的页面(SecondVC)中
@protocol PostValueDeledate <NSObject>
-(void)PostValue:(NSString *)Infor;
@end
@interface SecondViewController : UIViewController<UITextFieldDelegate>
//2.创建协议类型 的属性 在(SecondVC)中创建属性 id<XXXPostValueDelegate> delegate
@property(strong,nonatomic) id<PostValueDeledate> delegate;
@property(strong,nonatomic) NSString *MyStr;
@property(strong,nonatomic) UITextField *MyText;
@end
#import "SecondViewController.h"
@interface SecondViewController ()
@end
@implementation SecondViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"8efce6cd7b899e51feb2371b40a7d933c8950d83.jpg"]];
self.MyText=[[UITextField alloc] initWithFrame:CGRectMake(100, 100, 200, 50)];
self.MyText.borderStyle=1;
self.MyText.delegate=self;
self.MyText.text=self.MyStr;
NSLog(@"%@",self.MyStr);
[self.view addSubview:self.MyText];
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
//隐藏键盘
if ([self isFirstResponder])
{
[self resignFirstResponder];
}
//3.调用属性 即delegate 在(SecondVC)页面中的 对象传值的方法调用 [self.delegate postValue:self.MyText.text];
if (self.delegate)
{
[self.delegate PostValue:self.MyText.text];
}
//让本页面消失
[self dismissViewControllerAnimated:YES completion:
^{
NSLog(@"OK");
}];
return YES;
}
原文:http://www.cnblogs.com/tmf-4838/p/5281507.html