Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在didFinishPickingMediaWithInfo中的UIImagePickerController之间进行区分_Ios_Objective C_Uiimagepickercontroller_Picker - Fatal编程技术网

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;
@支柱