Ios 如何在didFinishPickingMediaWithInfo中的UIImagePickerController之间进行区分
我有两个Ios 如何在didFinishPickingMediaWithInfo中的UIImagePickerController之间进行区分,ios,objective-c,uiimagepickercontroller,picker,Ios,Objective C,Uiimagepickercontroller,Picker,我有两个uiimageview,我想在其中加载两个不同的图像。我有两个按钮,可以触发UIImagePickerController并调用我的 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 方法 是否有办法区分上述方法调用的选择器?您可以创建UIButton的实例 @interface YourClass () {
uiimageview
,我想在其中加载两个不同的图像。我有两个按钮,可以触发UIImagePickerController
并调用我的
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
方法
是否有办法区分上述方法调用的选择器?您可以创建UIButton的实例
@interface YourClass ()
{
UIButton *_selectedButton;
}
在触发UIImagePickerController
之前,您可以将按钮保存在实例变量中
-(void)button1Clicked:(UIButton *)button1{
_selectedButton = button1;
// call UIImagePickerController
}
-(void)button2Clicked:(UIButton *)button2{
_selectedButton = button2;
// call UIImagePickerController
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
if (_selectedButton == button1){
// perform your logic
} else if (_selectedButton == button2){
// perform your logic
}
}
您可以创建UIButton的一个实例
@interface YourClass ()
{
UIButton *_selectedButton;
}
在触发UIImagePickerController
之前,您可以将按钮保存在实例变量中
-(void)button1Clicked:(UIButton *)button1{
_selectedButton = button1;
// call UIImagePickerController
}
-(void)button2Clicked:(UIButton *)button2{
_selectedButton = button2;
// call UIImagePickerController
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
if (_selectedButton == button1){
// perform your logic
} else if (_selectedButton == button2){
// perform your logic
}
}
因为我只是试着问同一个问题,所以我也会把我的答案贴出来。我没有使用单独的
ui按钮
为ui图像视图
提供单击事件。这是我的完整代码-
#import "ViewController.h"
#define IMAGE1 1
#define IMAGE2 2
@interface ViewController ()<UINavigationControllerDelegate ,UIImagePickerControllerDelegate, UIGestureRecognizerDelegate, UIActionSheetDelegate>
@property (weak, nonatomic) IBOutlet UIImageView *image1;
@property (weak, nonatomic) IBOutlet UIImageView *image2;
@property NSInteger selectedImage;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self initImageView];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)initImageView {
_image2.userInteractionEnabled = YES;
_image1.userInteractionEnabled = YES;
UITapGestureRecognizer *image1Gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(addPhoto:)];
image1Gesture.numberOfTapsRequired = 1;
image1Gesture.numberOfTouchesRequired = 1;
[image1Gesture setDelegate:self];
_image1.tag = IMAGE1;
[_image1 addGestureRecognizer:image1Gesture];
UITapGestureRecognizer *image2Gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(addPhoto:)];
image2Gesture.numberOfTapsRequired = 1;
image2Gesture.numberOfTouchesRequired = 1;
[image2Gesture setDelegate:self];
_image2.tag = IMAGE2;
[_image2 addGestureRecognizer:image2Gesture];
}
-(void)addPhoto:(UIGestureRecognizer*) gestureRecognizer
{
NSLog(@"Tag = %ld",(long)[gestureRecognizer view].tag);
UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"Select Source"
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:@"Camera",
@"Gallery",nil];
// Show the sheet
if([gestureRecognizer view].tag == IMAGE1) {
sheet.tag = IMAGE1;
} else if([gestureRecognizer view].tag == IMAGE2) {
sheet.tag = IMAGE2;
} else {
sheet.tag = 000;
}
[sheet showInView: self.view];
}
#pragma mark - UIActionSheetDelegate
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
_selectedImage = actionSheet.tag;
switch (buttonIndex) {
case 0:
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
[self performSelector:@selector(takePhoto) withObject:nil afterDelay:0.3];
} else {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"The device have no camera" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
}
break;
case 1:
[self performSelector:@selector(selectPhoto) withObject:nil afterDelay:0.3];
break;
case 2:
NSLog(@"Invalid option");
break;
}
}
// take photo from camera
- (void)takePhoto {
NSLog(@"takePhoto from camera");
UIImagePickerController *imagePicker = [[UIImagePickerController alloc]init];
imagePicker.delegate = self;
imagePicker.allowsEditing = YES;
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePicker.cameraFlashMode = UIImagePickerControllerCameraFlashModeAuto;
[self presentViewController:imagePicker animated:NO completion:nil];
}
// select photo from gallery
- (void)selectPhoto {
NSLog(@"SelectPhoto from gallery");
UIImagePickerController *imagePicker = [[UIImagePickerController alloc]init];
imagePicker.delegate = self;
imagePicker.allowsEditing = YES;
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentViewController:imagePicker animated:NO completion:nil];
}
#pragma mark - UIImagePickerControllerDelegate delegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
[picker dismissViewControllerAnimated:YES completion:nil];
if (_selectedImage == IMAGE1) {
_image1.image = chosenImage;
} else if (_selectedImage == IMAGE2) {
_image2.image = chosenImage;
} else {
NSLog(@"Could not determine image selection");
}
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
return 1;
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
[picker dismissViewControllerAnimated:NO completion:nil];
}
@end
#导入“ViewController.h”
#定义图像1
#定义图像2
@界面视图控制器()
@属性(弱、非原子)IBUIImageView*image1;
@属性(弱,非原子)IBUIImageView*image2;
@属性NSInteger selectedImage;
@结束
@实现视图控制器
-(无效)viewDidLoad{
[超级视图下载];
[自初始化图像视图];
//加载视图后,通常从nib执行任何其他设置。
}
-(无效)未收到记忆警告{
[超级记忆警告];
//处置所有可以重新创建的资源。
}
-(void)initImageView{
_image2.userInteractionEnabled=是;
_image1.userInteractionEnabled=是;
UITapGestureRecognitzer*image1Gesture=[[UITapGestureRecognitzer alloc]initWithTarget:自我操作:@selector(addPhoto:)];
Image1Testure.numberOfTapsRequired=1;
Image1Testure.numberOfTouchesRequired=1;
[图像1测试集委托人:自我];
_image1.tag=image1;
[_Image1AddGestureRecognitor:image1测试];
UITapGestureRecognitzer*image2Gesture=[[UITapGestureRecognitzer alloc]initWithTarget:自我操作:@selector(addPhoto:)];
image2Gesture.numberOfTapsRequired=1;
Image2Testure.numberOfTouchesRequired=1;
[image2Gesture setDelegate:self];
_image2.tag=image2;
[_Image2AddGestureRecognitor:image2Gesture];
}
-(无效)添加照片:(UIGestureRecognitor*)GestureRecognitor
{
NSLog(@“Tag=%ld”,(长)[gestureRecognitor视图].Tag);
UIActionSheet*工作表=[[UIActionSheet alloc]initWithTitle:@“选择源”
代表:赛尔夫
取消按钮:@“取消”
破坏性按钮:无
其他按钮提示:@“摄像头”,
@“画廊”,无);
//出示床单
如果([GestureRecognitor view].tag==IMAGE1){
sheet.tag=IMAGE1;
}else if([GestureRecognitor view].tag==IMAGE2){
sheet.tag=IMAGE2;
}否则{
sheet.tag=000;
}
[图纸显示视图:self.view];
}
#pragma标记-UIActionSheetDelegate
-(无效)操作表:(UIActionSheet*)操作表单击按钮索引:(NSInteger)按钮索引{
_选择edimage=actionSheet.tag;
开关(按钮索引){
案例0:
如果([UIImagePickerController IsSourceType可用:UIImagePickerController SourceType相机]){
[自执行选择器:@selector(takePhoto)with object:nil afterDelay:0.3];
}否则{
UIAlertView*alert=[[UIAlertView alloc]initWithTitle:@”“消息:@“设备没有摄像头”委托:自取消按钮:@“确定”其他按钮:无,无];
[警报显示];
}
打破
案例1:
[自执行选择器:@selector(selectPhoto),对象:nil afterDelay:0.3];
打破
案例2:
NSLog(@“无效选项”);
打破
}
}
//照相
-(空)拍照{
NSLog(@“从相机拍摄”);
UIImagePickerController*imagePicker=[[UIImagePickerController alloc]init];
imagePicker.delegate=self;
imagePicker.allowsEditing=是;
imagePicker.sourceType=UIImagePickerControllerSourceTypeCamera;
imagePicker.cameraFlashMode=UIImagePicker控制器CameraFlashModeAuto;
[self-presentViewController:imagePicker已设置动画:未完成:无];
}
//从库中选择照片
-(无效)选择照片{
NSLog(@“从图库中选择照片”);
UIImagePickerController*imagePicker=[[UIImagePickerController alloc]init];
imagePicker.delegate=self;
imagePicker.allowsEditing=是;
imagePicker.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;
[self-presentViewController:imagePicker已设置动画:未完成:无];
}
#pragma标记-UIImagePickerControllerDelegate委托
-(void)imagePickerController:(UIImagePickerController*)picker未使用信息完成PickingMediaWithInfo:(NSDictionary*)信息{
UIImage*chosenImage=info[UIImagePickerControllerEditedImage];
[picker DismissionViewControllerInitiated:是完成:无];
如果(_selectedImage==IMAGE1){
_image1.image=chosenImage;
}如果(_selectedImage==IMAGE2),则为else{
_image2.image=chosenImage;
}否则{
NSLog(@“无法确定图像选择”);
}
}
-(NSInteger)pickerView中组件的编号:(UIPickerView*)pickerView{
返回1;
}
-(NSInteger)pickerView:(UIPickerView*)pickerView行数组件:(NSInteger)组件{
返回1;
}
-(无效)ImagePickerController IDCancel:(UIImagePickerController*)选择器{
[picker DismissionViewControllerInitiated:无完成:无];
}
@结束
因为我刚刚尝试了同一个问题,所以我也会发布我的答案。我没有使用单独的ui按钮
为ui图像视图
提供单击事件。这是我的完整代码-
#import "ViewController.h"
#define IMAGE1 1
#define IMAGE2 2
@interface ViewController ()<UINavigationControllerDelegate ,UIImagePickerControllerDelegate, UIGestureRecognizerDelegate, UIActionSheetDelegate>
@property (weak, nonatomic) IBOutlet UIImageView *image1;
@property (weak, nonatomic) IBOutlet UIImageView *image2;
@property NSInteger selectedImage;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self initImageView];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)initImageView {
_image2.userInteractionEnabled = YES;
_image1.userInteractionEnabled = YES;
UITapGestureRecognizer *image1Gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(addPhoto:)];
image1Gesture.numberOfTapsRequired = 1;
image1Gesture.numberOfTouchesRequired = 1;
[image1Gesture setDelegate:self];
_image1.tag = IMAGE1;
[_image1 addGestureRecognizer:image1Gesture];
UITapGestureRecognizer *image2Gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(addPhoto:)];
image2Gesture.numberOfTapsRequired = 1;
image2Gesture.numberOfTouchesRequired = 1;
[image2Gesture setDelegate:self];
_image2.tag = IMAGE2;
[_image2 addGestureRecognizer:image2Gesture];
}
-(void)addPhoto:(UIGestureRecognizer*) gestureRecognizer
{
NSLog(@"Tag = %ld",(long)[gestureRecognizer view].tag);
UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"Select Source"
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:@"Camera",
@"Gallery",nil];
// Show the sheet
if([gestureRecognizer view].tag == IMAGE1) {
sheet.tag = IMAGE1;
} else if([gestureRecognizer view].tag == IMAGE2) {
sheet.tag = IMAGE2;
} else {
sheet.tag = 000;
}
[sheet showInView: self.view];
}
#pragma mark - UIActionSheetDelegate
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
_selectedImage = actionSheet.tag;
switch (buttonIndex) {
case 0:
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
[self performSelector:@selector(takePhoto) withObject:nil afterDelay:0.3];
} else {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"The device have no camera" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
}
break;
case 1:
[self performSelector:@selector(selectPhoto) withObject:nil afterDelay:0.3];
break;
case 2:
NSLog(@"Invalid option");
break;
}
}
// take photo from camera
- (void)takePhoto {
NSLog(@"takePhoto from camera");
UIImagePickerController *imagePicker = [[UIImagePickerController alloc]init];
imagePicker.delegate = self;
imagePicker.allowsEditing = YES;
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePicker.cameraFlashMode = UIImagePickerControllerCameraFlashModeAuto;
[self presentViewController:imagePicker animated:NO completion:nil];
}
// select photo from gallery
- (void)selectPhoto {
NSLog(@"SelectPhoto from gallery");
UIImagePickerController *imagePicker = [[UIImagePickerController alloc]init];
imagePicker.delegate = self;
imagePicker.allowsEditing = YES;
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentViewController:imagePicker animated:NO completion:nil];
}
#pragma mark - UIImagePickerControllerDelegate delegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
[picker dismissViewControllerAnimated:YES completion:nil];
if (_selectedImage == IMAGE1) {
_image1.image = chosenImage;
} else if (_selectedImage == IMAGE2) {
_image2.image = chosenImage;
} else {
NSLog(@"Could not determine image selection");
}
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
return 1;
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
[picker dismissViewControllerAnimated:NO completion:nil];
}
@end
#导入“ViewController.h”
#定义图像1
#定义图像2
@界面视图控制器()
@属性(弱、非原子)IBUIImageView*image1;
@支柱