协议委托代理传值
实现协议方法
通过setDelegate来设置代理对象,最典型的例子是常用的TableView.代理一般用于回传结果
优点:支持它的类有详尽和具体信息
缺点:该类必须支持委托。某一时间只能有一个委托连接到某一对象
1.声明代理
2.写代理方法 哪声明地方调用代理方法 就在哪写delegate属性
窗体间传值代码
other.h
#import <UIKit/UIKit.h> @protocol myDelegate <NSObject> @required -(void)sendStr:(NSString *)str; @end @interface OtherViewController : UIViewController @property (nonatomic, assign) id<myDelegate> delegate; @end
other.m
@interface OtherViewController () @property (weak, nonatomic) IBOutlet UITextField *myText; @end @implementation OtherViewController - (IBAction)showNew:(id)sender { if ([self.delegate respondsToSelector:@selector(sendStr:)]) { [self.delegate sendStr:self.myText.text]; } [self dismissViewControllerAnimated:YES completion:nil]; } @end
view.m
#import "ViewController.h" #import "OtherViewController.h" @interface ViewController ()<myDelegate> - (IBAction)ShowNew:(UIButton *)sender; @property (weak, nonatomic) IBOutlet UILabel *myLib; @property (nonatomic, copy) NSString *tempStr; @end @implementation ViewController -(void)sendStr:(NSString *)str { NSLog(@"传值结果:%@",str); self.myLib.text = str; } - (void)viewDidLoad { [super viewDidLoad]; } - (IBAction)ShowNew:(UIButton *)sender { UIStoryboard *sb = [UIStoryboard storyboardWithName:@"OtherViewController" bundle:nil]; OtherViewController *ovc = sb.instantiateInitialViewController; ovc.delegate = self; [self presentViewController:ovc animated:YES completion:nil]; } @end