协议委托代理传值

实现协议方法

 

通过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

  

 

posted @ 2015-12-08 18:32  若云  阅读(133)  评论(0编辑  收藏  举报