美文网首页
iOS 代理的基本使用

iOS 代理的基本使用

作者: CJ_BLUE | 来源:发表于2017-07-04 16:59 被阅读0次

简介

代理在开发过程中比较常见,像<UITableViewDelegate>就是系统自带的协议,代理一般用来页面间传值,传递事件,接下来通过页面间传值来简单讲一下代理的使用方法。

页面间传值

首先明确一下目的,A控制器跳转到B控制器,再从B控制跳转回来,并且带回一个值。

第一步:在B控制器声明一份协议
@protocol BViewControllerDelegate <NSObject>// 一般用控制器名+Delegate命名

- (void)returnString:(NSString *)str;// 代理方法 返回一个字符串

@end
第二步:声明一个代理属性
@property (nonatomic, weak) id<BViewControllerDelegate> delegate;
第三步:在跳转回A控制的方法里写代理执行方法(这里用了模态跳转)
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    // 判断代理方法是否存在
    if ([self.delegate respondsToSelector:@selector(returnString:)]) {
        [self.delegate returnString:@"回传数据"];
    }
    [self dismissViewControllerAnimated:YES completion:nil];
}
第四步:在A控制器里签订代理
@interface ViewController () <BViewControllerDelegate>
第五步:签订代理人
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    BViewController *VC = [BViewController new];
    VC.delegate = self; // 这步是签订代理人
    [self presentViewController:VC animated:YES completion:nil];
}
第六步:实现代理方法
- (void)returnString:(NSString *)str
{
    NSLog(@"%@", str);
}

这样一个代理传值就写完了,能实现页面间的传值,下面我们来想一下,如果一个页面可以跳转到多个页面,就像首页,而且返回的时候都要做不同的动作(例如:刷新数据,更新某个UI,等等),那么所有页面都写一个代理的话,首页就需要实现多个代理方法,这可能不是我们想要的,接下来就来讲讲Protocol文件。

首先创建一个Objective-C File文件


屏幕快照 2017-07-04 下午1.59.00.png

然后文件类型选择Protocol


屏幕快照 2017-07-04 下午1.59.46.png
创建出来的文件只有.h文件,然后写上代理方法,这个文件就结束了。
@protocol DoSomething <NSObject>

- (void)doSomethingWith:(NSString *)type;

@end

然后去需要回调的控制器(还是用上面提到的B控制器)引入头文件,之后从声明代理属性开始,之后步骤都一样,就不多说了,直接贴代码

#import "DoSomething.h" // 引头文件
@property (nonatomic, weak) id<DoSomething> doDelegate; // 声明代理属性
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    // 调用代理方法
    if ([self.doDelegate respondsToSelector:@selector(doSomethingWith:)]) {
        [self.doDelegate doSomethingWith:@"回调"];
    }
    [self dismissViewControllerAnimated:YES completion:nil];
}
@interface ViewController () <DoSomething> // 签订代理
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    BViewController *VC = [BViewController new];
    VC.doDelegate = self; // 签订代理人
    [self presentViewController:VC animated:YES completion:nil];
}
// 实现代理方法
- (void)doSomethingWith:(NSString *)type
{
    NSLog(@"%@", type); // 
}

代理方法里可以根据不同的type来进行不同的操作,这样多个控制器就可以共用一个代理方法了。

结语:限于水平,本文只写了一些基本用法和注意事项,如果文中存在错误请指出,我会及时修改。

相关文章

  • 4.1 UITextFiled文本框

    ios UITextField文本框基本使用,以及所有代理方法的作用

  • iOS 代理的基本使用

    简介 代理在开发过程中比较常见,像 就是系统自带的协议,代理一般用来页面间传值,传递事件,接下来通过页面间传值来简...

  • iOS的代理的基本使用

    常见的系统自带的代理方法 这个是系统自带的协议 第一步就是在需要代理的B控制器的.h文件来创建一个代理处理 @pr...

  • ios-代理的基本使用

    代理的基本用法 界面由A->B 再由B->A 的时候,需要B的值传值给A以下是用代理的方法实现, 代理和传值是先...

  • Delegate的基本使用

    代理的基本使用 代理是一种通用的设计模式,在iOS中对代理设计模式支持的很好,有特定的语法来实现代理模式,OC语言...

  • iOS之代理笔记

    代理的基本使用 代理是一种通用的设计模式,在iOS中对代理设计模式支持的很好,有特定的语法来 实现代理模式,OC语...

  • 设计模式-代理

    代理的基本使用 代理是一种通用的设计模式,在iOS中对代理设计模式支持的很好,有特定的语法来实现代理模式,OC语言...

  • iOS 代理设计模式

    转自 <简书 — 刘小壮> 代理的基本使用 代理是一种通用的设计模式,在iOS中对代理设计模式支持的很好,有特定...

  • iOS-UICollectionView基本使用

    iOS-UICollectionView基本使用 iOS-UICollectionView基本使用

  • 代理的基本使用

    iOS中傳值的方法有這些1.通知:在iOS中由通知中心进行消息接收和消息广播,是一种一对多的消息传递方式。2.代理...

网友评论

      本文标题:iOS 代理的基本使用

      本文链接:https://www.haomeiwen.com/subject/koathxtx.html