3

我正在开发一个简单的应用程序扫描二维码。要扫描 QR 码,我使用一种委托方法,如下所示。

- (void) imagePickerController: (UIImagePickerController*) reader didFinishPickingMediaWithInfo: (NSDictionary*) info

此外,我还有另一种用于源型相机拍照的委托方法。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)img editingInfo:(NSDictionary *)editInfo 

我有 2 个用于扫描 QR 和拍照的按钮。但问题是当我拍一张新照片时

- (void) imagePickerController: (UIImagePickerController*) reader didFinishPickingMediaWithInfo: (NSDictionary*) info

方法被调用。如何解决这个问题。当我选择照片按钮时,我需要调用特定的委托方法,当我调用选择 QR 按钮时,我需要调用其他委托方法。

4

1 回答 1

0

首先 - 值得一提的是这种方法:

- (void)imagePickerController:(UIImagePickerController *)picker 
        didFinishPickingImage:(UIImage *)img 
                  editingInfo:(NSDictionary *)editInfo 

自 iOS 3.0 起已弃用。现在唯一可以使用的方法是

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

(您从字典中获取图像参考)

要回答这个问题:您需要一种方法来识别picker委托回调中的每一个。一种方法是创建几个属性,每个选择器一个,并在调用选择器时设置属性...

@property (nonatomic, weak) UIImagePickerController* QRpicker;
@property (nonatomic, weak) UIImagePickerController* cameraPicker;

创建您的 QRPicker...

 UIImagePickerController* QRpicker = [[UIImagePickerController alloc] init];
         //configure QRPicker
 [self presentViewController:QRpicker];
 self.QRpicker = QRpicker;

对 cameraPicker 执行相同的操作

然后你只需要检查哪种类型的选择器调用了委托方法

- (void)imagePickerController:(UIImagePickerController *)picker  
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
  if ([picker isEqual:self.QRPicker])
      //code for QRPicker delegate
  else 
      //code for cameraPicker delegate
于 2013-05-07T05:35:18.633 回答