方法使用:引入头文件

#import "UIImagePickerController+Block.h"

我这拖出来的两个属性

@property (weak, nonatomic) IBOutlet UIImageView *showImageView;

- (IBAction)openClick;

// 实用方法

- (IBAction)openClick {

UIImagePickerController_Block *imagePickerVC = [UIImagePickerController_Block defaultController];

[imagePickerVC initWith:self SourceType:UIImagePickerControllerSourceTypePhotoLibrary  backBlcok:^(id obj) {

self.showImageView.image = obj;

}];

}

UIImagePickerController+Block.h文件如下

#import <UIKit/UIKit.h>

typedef void (^CallBackBlcok) (id obj);

@interface UIImagePickerController_Block : UIImagePickerController

+ (UIImagePickerController_Block *)defaultController;

/**

* @brief 选中照片回调方法.

*

* @param controller        当前控制器

*

* @param type              相片来源

*

* @param callbackblock     回调block,返回选中的image对象

*

*/

- (void)initWith:(UIViewController *)controller SourceType:(UIImagePickerControllerSourceType)type backBlcok:(CallBackBlcok)callbackblcok;

UIImagePickerController+Block.m文件如下

//

//  UIImagePickerController+Block.m

//  UIImagePickerController+Block

//

//  Created by Apple on 15/9/24.

//  Copyright © 2015年 Zhipin. All rights reserved.

//

#import "UIImagePickerController+Block.h"

#import <objc/runtime.h>

static id blockkey;

@interface UIImagePickerController_Block ()<UINavigationControllerDelegate,UIImagePickerControllerDelegate>

@end

@implementation UIImagePickerController_Block

+ (UIImagePickerController_Block *)defaultController{

static UIImagePickerController_Block *intance;

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

intance = [[self alloc]init];

});

return intance;

}

#pragma mark - ============== 选中照片的回调

- (void)initWith:(UIViewController *)controller SourceType:(UIImagePickerControllerSourceType)type backBlcok:(CallBackBlcok)callbackblcok{

objc_setAssociatedObject(self, &blockkey, callbackblcok, OBJC_ASSOCIATION_COPY_NONATOMIC);

UIImagePickerController_Block *imageViewController = [UIImagePickerController_Block new];

// 设置照片来源

imageViewController.sourceType = type;

// 设置代理

imageViewController.delegate   = self;

[controller  presentViewController:imageViewController animated:YES completion:nil];

}

#pragma mark - ============== 选中照片

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{

// UIImagePickerControllerOriginalImage 原始图片

// UIImagePickerControllerEditedImage 编辑后图片

UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];

CallBackBlcok block = (CallBackBlcok)objc_getAssociatedObject(self, &blockkey);

if (block) {

block(image);

}

[picker dismissViewControllerAnimated:YES completion:NULL];

}

#pragma mark - ============== 取消相册

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {

[picker dismissViewControllerAnimated:YES completion:NULL];

}

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view.

}

@end

==================== 纯手打。。。。。。。。==================

==================================================

UIImagePickerController之Block回调的更多相关文章

  1. iOS 键盘添加完成按钮,delegate和block回调

    这个是一个比较初级一点的文章,新人可以看看.当然实现这个需求的时候自己也有一点收获,记下来吧. 前两天产品要求在工程的所有数字键盘弹出时,上面带一个小帽子,上面安装一个“完成”按钮,这个完成按钮也没有 ...

  2. Objective-C中的Block回调模式

    在前面的博客中提到了Block的概念和使用方法,个人感觉Block最爽的用法莫过于在回调时用block.感觉比委托回调和目标方法回调用着要顺手,好不好用还得读者亲自用一下才知道.如果 读者之前用过SS ...

  3. Block回调

    •Block的定义   •Block.委托.通知.回调函数,它们虽然名字不一样,但是原理都一样,都是"回调机制"的思想的具体实现 •前面的代理模式的项目改为Block回调实现    ...

  4. UIAlertController——之Block回调

    iOS8.0之后出现的提示框 =.=,比自己去改block回调要好.

  5. 第十篇、自定义UIBarButtonItem和UIButton block回调

    // 自定义导航栏左边按钮 self.navigationItem.leftBarButtonItem = [JQBlockedBarButtonItem blockedBarButtonItemWi ...

  6. iOS很重要的 block回调

    刚刚进入ios开发行业,发现开发中要用到大量的block回调,由此可见它的重要性.学习它之前我也是网上找的资料,推荐这篇文章http://blog.csdn.net/mobanchengshuang/ ...

  7. 代码块(Block)回调一般阐述

    本章教程主要对代码块回调模式进行讲解,已经分析其他回调的各种优缺点和适合的使用场景. 代码块机制 Block变量类型 Block代码封装及调用 Block变量对普通变量作用域的影响 Block回调接口 ...

  8. 63.delegate回调 和block回调

    效果:viewController里面放置一个按钮和Lab,点击按钮进入oneViewController(delegate回调)或者BlockViewController(block回调),两者控制 ...

  9. iOS开发-Block回调

    关于Block之前有一篇文章已经写过一篇文章Object-C-代码块Block回顾,不过写的比较浅显,不能体现出Block在实际开发中的重要性,关于Block的基础知识,可以参考之前的博客.在实际开发 ...

随机推荐

  1. php函数将对象转换为数组以及json_decode的使用技巧

    在写php代码的时候,发现调用接口返回的结果类型是对象,不是自己想要的数组,于是乎,写了一个将对象转化数组的函数: /** * 将对象转化为数组 */ private function objectT ...

  2. js正则表达式中匹配反引号

    直接用反引号就可以了~ /`[\W\w\*]+`\.`[\W\w\*]+`/

  3. 图的强连通分量-Kosaraju算法

    输入一个有向图,计算每个节点所在强连通分量的编号,输出强连通分量的个数 #include<iostream> #include<cstring> #include<vec ...

  4. Push failed: Failed with error: fatal: Could not read from remote repository.

    GitLab push远端,出现错误提示:Push failed: Failed with error: fatal: Could not read from remote repository. 原 ...

  5. ZoneMinder配置与使用

    ZoneMinder是一套基于Linux操作系统的摄像机的视像数据监控的应用软件.应用范围广泛,包括商业或家居防盗等.ZoneMinder支持单一或多台视像镜头应用,包括摄取.分析.记录.和监视来源, ...

  6. [前端 3]纯Js制作俄罗斯方块游戏

    导读:在别人文章里看到了,然后写了一遍.结果出错了,然后调出来了,然后理解了一下,加了点注释,有一些想法.忘了在 哪一篇上面看的了,就贴不出来链接地址.原谅.呃,真没自己的东西,权当练打字了吧.其实, ...

  7. PAT1053. Path of Equal Weight

    //之前一直尝试用vector存储path,但是每次错误后回退上一级节点时不能争取回退,导致探索路径正确,但是输出不正确,用参数num,标记前一个路径点的位置传递参数,就好多了 //其中在输入时就将后 ...

  8. ittype导师课程 - SAP顾问课程,云课堂,个性辅导

    ittype致力于成为最专业的<企业管理研究+管理信息化需求研究+解决方案+项目+人才>全生态链服务与功能平台,平台网址:www.ittype.com. 平台由导师+学员模式,导师教导学员 ...

  9. 深入了解Javascript模块化编程

    本文译自Ben Cherry的<JavaScript Module Pattern: In-Depth>.虽然个人不太认同js中私有变量存在的必要性,但是本文非常全面地介绍了Javascr ...

  10. foreach 和 list.foreach 初步测试

    单纯从速度上讲 小数据量下foreach 较快,list.Foreach 由于 public void ForEach(Action<T> action) { ; i <this._ ...