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
版权声明:本文为博主原创文章,未经博主允许不得转载。

利用Swift之协议语法实现页面间的传值功能

利用Swift之协议语法实现页面间的传值功能
  • mapboo
  • mapboo
  • 2014年09月28日 17:12
  • 6714

iOS中协议delegate的传值注意点

1、iOS中协议的用途一般是用来进行反向传值,一般步骤如下: 1)声明协议 @protocol ThirdDalegate NSObject> -(void)printNum:(int)nu...
  • reallyWCF
  • reallyWCF
  • 2017年02月18日 16:11
  • 490

IOS-协议

----------------------------MainViewController.m #import "MainViewController.h" //导入类 #import...
  • u014508866
  • u014508866
  • 2014年04月14日 10:22
  • 252

iOS-协议

一、     简单使用 1.         基本用途 1>   可以用来声明一大堆方法(不能声明成员变量) 2>   只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明 3>   只要父...
  • u011227986
  • u011227986
  • 2015年06月29日 18:29
  • 369

BLOCK传值 协议传值

通过使用Block实现从后往前传值写协议或添加属性@protocol SecondViewControllerDelegate -(void)changeColor; @end @interface ...
  • Graves_Seven
  • Graves_Seven
  • 2015年08月26日 17:47
  • 186

iOS- UI界面-传值

常见传值方式:属性传值,协议传值,单例传值 属性传值:(eg:A传入B) 1.在B中定义同类型属性用来接受数据 2.在A中给B对象的属性赋值 3.在B中使用传过来的值 协...
  • neusoft10
  • neusoft10
  • 2014年08月21日 19:17
  • 238

ios-界面之间传值

1、使用SharedApplication,定义一个变量来传递. 2、使用文件,或者NSUserdefault来传递 3、通过一个单例的class来传递 4、通过Delegate来传...
  • l841017122
  • l841017122
  • 2015年08月20日 22:49
  • 160

iOS-传值大全

前言 iOS传值方式很多,这里面我主要讲几种常用的传值; 以下传值正向传值A页面到B页面,反向传值B页面传到A页面。 1.属性传值 A页面: SecondViewController *svc =...
  • u014220518
  • u014220518
  • 2016年12月05日 18:00
  • 188

ios 协议传值

协议传值(作为回调比较实用) 如果单单是一个页面跳转传值的话 直接用属性来传值就很快     A--->B 好比说 A 跳转到 B 并且传值  在A页面就直接 b.property = @”hel...
  • LPVSWEI
  • LPVSWEI
  • 2013年10月10日 15:45
  • 652

协议传值

协议传值是从
  • jelly_1992
  • jelly_1992
  • 2014年11月13日 08:47
  • 327
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS-协议传值
举报原因:
原因补充:

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