方法使用:引入头文件

#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. Unable to load type System.Data.Entity.DynamicProxiesXXXXXrequired for deserialization.

    Memcache实例的Get方法时抛出了异常“Unable to load type System.Data.Entity.DynamicProxies.AdInfoItems_19CD09C8E46 ...

  2. 洛谷P1457 城堡 The Castle

    P1457 城堡 The Castle 137通过 279提交 题目提供者该用户不存在 标签USACO 难度提高+/省选- 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 我们憨厚的USACO ...

  3. TCP/IP详解学习笔记(7)-- 初识运输层

    作为TCP和UDP协议的学习前奏,简单的介绍一下运输层的相关内容,方便对TCP,UDP的学习. 1.概述      运输层的任务主要是负责主机中两个进程之间的通信.      运输层的基本功能: 复用 ...

  4. 《Unix/Linux日志分析与流量监控》书稿完成

    <Unix/Linux日志分析与流量监控>书稿完成 近日,历时3年创作的75万字书稿已完成,本书紧紧围绕网络安全的主题,对各种Unix/Linux系统及网络服务日志进行了全面系统的讲解,从 ...

  5. Oracle笔记 十、PL/SQL存储过程

    --create or replace 创建或替换,如果存在就替换,不存在就创建 create or replace procedure p is cursor c is select * from ...

  6. css中float left与float right的使用说明

    转自:http://www.jb51.net/css/33740.html   脚本之家 No! 要注意以下几点: 1. 浮动元素会被自动设置成块级元素,相当于给元素设置了display:block( ...

  7. jquery 入门之-------jquery 简介

    什么是jquery? Jquery是一个Javascript库,通过封装原生的Javascript函数得到一套定义好的方法.它可以用个少的代码完成更多更强大更复杂的功能,从而得到开发者的青睐. So! ...

  8. 【转】一个高端.NET技术人才的2014年度总结

    [转]一个高端.NET技术人才的2014年度总结  本人在一家公司做技术负责人.主要从事的是.net方面的开发与管理,偏重开发. 弹指一挥间,时间飘然而过,转眼又是一年. 回顾2014年,是我人生中最 ...

  9. scan的filter使用

    本次操作的hbase的t1表的数据是: hbase(main)::> scan 't1' ROW COLUMN+CELL column=f1:age, timestamp=, value= co ...

  10. HTTP首部及各状态码

    通用首部:客户端和服务器都可以使用的通用首部,比如Status Code: 请求首部:请求首部是请求报文特有的,它们为服务器提供了一些额外信息,例如Accept: */* 用来告知服务器客户端会接受与 ...