zoukankan      html  css  js  c++  java
  • 使用Delegate在两个ViewController之间传值


    以下就实现了使用Delegate在两个ViewController之间传值,这种场景一般应用在进入子界面输入信息,完后要把输入的信息回传给前一个界面的情况,比如修改用户个人信息,点击修改进入修改界面,修改完后到显示界面显示修改后的结果。

    协议中声明的方法:

    1. #import <Foundation/Foundation.h>  
    2. @class UserEntity;  
    3.   
    4. @protocol PassValueDelegate <NSObject>  
    5.   
    6. -(void)passValue:(UserEntity *)value;  
    7.   
    8. @end  


    在第一个窗口实现协议:

    1. #import <UIKit/UIKit.h>  
    2. #import "PassValueDelegate.h"  
    3.   
    4. //第一个窗口遵守PassValueDelegate  
    5. @interface ViewController : UIViewController<PassValueDelegate>  
    6.   
    7. @property (retain, nonatomic) IBOutlet UILabel *nameLabel;  
    8. @property (retain, nonatomic) IBOutlet UILabel *ageLabel;  
    9. @property (retain, nonatomic) IBOutlet UILabel *gendarLabel;  
    10.   
    11. - (IBAction)openBtnClicked:(id)sender;  
    12.   
    13. @end  


    .m文件中实现协议的方法:

    1. //实现协议,在第一个窗口显示在第二个窗口输入的值,类似Android中的onActivityResult方法  
    2. -(void)passValue:(UserEntity *)value  
    3. {  
    4.     self.nameLabel.text = value.userName;  
    5.     self.ageLabel.text = [NSString stringWithFormat:@"%d",value.age];  
    6.     self.gendarLabel.text = value.gendar;  
    7. }  


    点击Open按钮所触发的事件:

     //点击进入第二个窗口的方法  

    1. - (IBAction)openBtnClicked:(id)sender {  
    2.     SecondViewController *secondView = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:[NSBundle mainBundle]];  
    3.     //设置第二个窗口中的delegate为第一个窗口的self  
    4.     secondView.delegate = self;  
    5.       
    6.     [self.navigationController pushViewController:secondView animated:YES];  
    7.     [secondView release];  
    8. }  


    第二个窗口中声明一个NSObject对象,该对象遵守PassValueDelegate协议:


    1. #import <UIKit/UIKit.h>  
    2. #import "PassValueDelegate.h"  
    3.   
    4. @interface SecondViewController : UIViewController  
    5.   
    6. @property (retain, nonatomic) IBOutlet UITextField *nameTextField;  
    7. @property (retain, nonatomic) IBOutlet UITextField *ageTextFiled;  
    8. @property (retain, nonatomic) IBOutlet UITextField *gendarTextField;  
    9.   
    10. //这里用assign而不用retain是为了防止引起循环引用。  
    11. @property(nonatomic,assign) NSObject<PassValueDelegate> *delegate;  
    12.   
    13. - (IBAction)okBtnClicked:(id)sender;  
    14. - (IBAction)closeKeyboard:(id)sender;  
    15.   
    16. @end  


    输入完毕后,点击OK按钮所触发的事件:

    1. - (IBAction)okBtnClicked:(id)sender {  
    2.     UserEntity *userEntity = [[UserEntity alloc] init];  
    3.     userEntity.userName = self.nameTextField.text;  
    4.     userEntity.gendar = self.gendarTextField.text;  
    5.     userEntity.age = [self.ageTextFiled.text intValue];  
    6.       
    7.     //通过委托协议传值  
    8.     [self.delegate passValue:userEntity];  
    9.     //退回到第一个窗口  
    10.     [self.navigationController popViewControllerAnimated:YES];  
    11.       
    12.     [userEntity release];  
    13. }  
  • 相关阅读:
    zoj 2316 Matrix Multiplication 解题报告
    BestCoder7 1001 Little Pony and Permutation(hdu 4985) 解题报告
    codeforces 463C. Gargari and Bishops 解题报告
    codeforces 463B Caisa and Pylons 解题报告
    codeforces 463A Caisa and Sugar 解题报告
    CSS3新的字体尺寸单位rem
    CSS中文字体对照表
    引用外部CSS的link和import方式的分析与比较
    CSS样式表引用方式
    10个CSS简写/优化技巧
  • 原文地址:https://www.cnblogs.com/niexiaobo/p/4446487.html
Copyright © 2011-2022 走看看