iOS-协议传值

原创 2016年08月28日 19:21:18

协议传值和block一样 懂用于反向传值 可以用协议传值的地方都可以用block传值 这样视图不能做到的事情就可以委托控制器去帮他完成

协议传值有6步

委托方有3步

1.在其.h文件中拟定协议方法

2.定义一个委托的属性

3.监听代理是否能够执行协议方法

#import <UIKit/UIKit.h>

@class  MyCollectionViewCell;

@protocol MyCollectionViewCellDegelate <NSObject>

-(void)addImageBtn:(MyCollectionViewCell *)cell;

-(void)cancelImageBtn:(MyCollectionViewCell *)cell;

@end

@interface MyCollectionViewCell : UICollectionViewCell

 @property(nonatomic,strong)UIImage * iimage;

@end


-(void)addImageBtn{

    if ([self.delegate respondsToSelector:@selector(addImageBtn:)]) {

        [self.delegate addImageBtn:self];

    }

    

}


-(void)cancelImageBtn{

    if ([self.delegate respondsToSelector:@selector(cancelImageBtn:)]) {

        [self.delegate cancelImageBtn:self];

    }

}



代理方有3步

1.成为代理

    cell.delegate = self;


2.遵守协议

@interface ViewController ()<UICollectionViewDelegate,UICollectionViewDataSource,MyCollectionViewCellDegelate,UIImagePickerControllerDelegate,UINavigationControllerDelegate>



3实现代理方法

#pragma mark ---自定义cell代理方法

-(void)addImageBtn:(MyCollectionViewCell *)cell{

    

    _selectIndex = [self.collectionView indexPathForCell:cell].item;

    

    UIAlertController * alertVc = [UIAlertController alertControllerWithTitle:@"请选择要打开的设备" message:nil preferredStyle:(UIAlertControllerStyleAlert)];

    UIAlertAction * photo = [UIAlertAction actionWithTitle:@"相册" style:(UIAlertActionStyleDefault) handler:^(UIAlertAction * _Nonnull action) {

        //打开相册

        [self openPhoto];

    }];

    [alertVc addAction:photo];

    UIAlertAction * camera = [UIAlertAction actionWithTitle:@"相机" style:(UIAlertActionStyleDefault) handler:^(UIAlertAction * _Nonnull action) {

       

        //打开相机

        [self openCamera];

    }];

    [alertVc addAction:camera];

    

    UIAlertAction * cancel = [UIAlertAction actionWithTitle:@"取消" style:(UIAlertActionStyleCancel) handler:nil];

    [alertVc addAction:cancel];

    [self presentViewController:alertVc animated:YES completion:nil];

}


-(void)cancelImageBtn:(MyCollectionViewCell *)cell{

    [_dataArr removeObject:cell.iimage];

    [self.collectionView reloadData];

}


参照集合视图那个demo
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

iOS 协议传值模版

  • 2014-11-06 14:51
  • 181KB
  • 下载

iOS开发之协议:代理传值

刚开始做iOS开发的时候,对 protocol、delegate 的理解一直都是晕晕乎乎一知半解的状态,不知道两个UIViewController之间怎么进行传值。 面试过几个童鞋,问道怎么用 de...

iOS 开发之协议-代理传值

iOS 开发之协议-代理传值 刚开始做iOS开发的时候,对 protocol、delegate 的理解一直都是晕晕乎乎一知半解的状态,不知道两个UIViewController之间怎...

IOS页面之间通过委托(协议)传值

传值过程是从一个storyboard创建的默认界面One 跳转到一个用xib创建的页面Two,在页面Two里输入数据,然后返回输入的数据到页面One,页面One如下: 单击注册按钮跳转到页面two ...

iOS之界面传值(通知,属性,协议,NSUserDefaults,KVC)

通知传值 通知是在跳转控制器之间常用的传值代理方式。NSNotificationCenter提供了一种解耦的方式,就是任何对象都可以发送通知到中心,同时任何对象可以监听中心的通知。 发送通知 //通...

ios之协议传值(Protocol)

协议: 协议是一个方法签名的列表,在其中可以定义若干个方法。根据配置,遵守该协议的类会去实现这个协议中规定的若干个方法。 代理: 代理是一个概念,很难用一个名词去定义(如我们可以...

iOS开发-Protocol协议及委托代理(Delegate)传值

前言:因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来代替。Protocol(协议)只能定义公用的一套接口,但不能提供具体的实现方法。也就是说,它只告诉你要做什么,但...

iOS协议传值封装总结

大家好,我是亮亮,这是我总结的协议传值封装的方法。

iOS开发-Protocol协议及委托代理(Delegate)传值

前言:因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来代替。Protocol(协议)只能定义公用的一套接口,但不能提供具体的实现方法。也就是说,它只告诉你要做什么,但...

iOS (页面间传值)协议和代理的使用 protocol delegate

最近搜关于协议和代理使用相关内容的时候发现雷同太多,这篇是很早前整理的我已经记不清是自己修改过了的,还是直接在往上复制下来的,不过感觉介绍还是蛮细致的 1、首先定义个一委托UIViewPassValu...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)