首页 > 代码库 > iOS代理模式

iOS代理模式

iOS代理模式的简单理解:当一个对象无法直接获取到另一个对象的指针,又希望对那个变量进行一些操作时,可以使用代理模式。

代理主要由三部分组成:

(1)协议:用来指定代理双方可以做什么,必须做什么。

(2)代理:根据指定的协议,完成委托方需要实现的功能。

(3)委托:根据指定的协议,指定代理去完成什么功能。

 
代理使用步骤
1.申明一个协议  (这个写在需要被获取的对象里面,也可以单独写一个类)

@protocol TextDelegate

-(void)deliverFirsttext:(NSString* )text1 withDeliverSecondtext:(NSString * )text2;

@end

 
2.代理
#import #import "LoginProtocol.h"
@interface LoginViewController : UIViewController 
//通过属性来设置代理对象
@property (nonatomic, weak) id delegate;
@end
 
实现部分:
 
@implementation LoginViewController
- (void)loginButtonClick:(UIButton *)button {
      // 判断代理对象是否实现这个方法,没有实现会导致崩溃  
      if ([self.delegaterespondsToSelector:@selector(deliverFirsttext:withDeliverSecondtext:)]) {
      // 调用代理对象的登录方法,代理对象去实现登录方法      
      [self.delegate deliverFirsttext:self.text1.textwithDeliverSecondtext:self.text2.text];
  }
}
 
3 设置代理方 (获取到所需要对象)
@interface ViewController ()  
@end
 
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
 
}
 

- (IBAction)buttonAction:(id)sender {

    SecondViewController *VC =

    [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"SecondViewController"];

    //设置当前控制器为secondVC的代理

    VC.delegate = self;

    [self presentViewController:VC animated:YES completion:^{

    }];

}

 

-(void)deliverFirsttext:(NSString *)text1 withDeliverSecondtext:(NSString *)text2{

    

    self.label1.text = text1;

    self.label2.text = text2;

}

 

实现效果截图:

      技术分享技术分享

 

 

 

 

iOS代理模式