2013-05-07 3 views
3

Je développe une application simple de lecture de code QR. Pour scanner le code QR, j'utilise une méthode de délégué comme indiqué ci-dessous.iPhone - Comment faire face à plusieurs UIImagePickerControllerDelegate?

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

J'ai également une autre méthode de délégation pour une caméra de type source pour prendre une photo.

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

J'ai 2 boutons pour scanner QR et prendre des photos. Mais le problème est quand je prends une nouvelle photo aussi la méthode

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

est appelée. Comment résoudre ceci. Lorsque je sélectionne le bouton photo, je dois appeler la méthode déléguée spécifique et quand j'appelle, sélectionnez le bouton QR. J'ai besoin d'appeler la méthode de l'autre délégué.

+0

Vous pouvez utiliser simplement des «drapeaux» pour différencier les clics des boutons. – Maulik

+0

@Maulik pouvez-vous s'il vous plaît donner un bref à ce sujet. – sachi

Répondre

0

d'abord - il convient de mentionner que cette méthode:

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

est obsolète depuis iOS 3.0. La seule méthode à utiliser est maintenant

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

(vous obtenez la référence d'image du dictionnaire)

Pour répondre à la question: vous avez besoin d'un moyen d'identifier chaque picker dans le rappel des délégués. Une façon de le faire serait de faire deux ou trois propriétés, un pour chaque sélecteur, et définissez la propriété lorsque vous invoquez le sélecteur ...

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

la création de votre QRPicker ...

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

faire la même chose pour le cameraPicker

Ensuite il vous suffit de vérifier quel type de sélecteur a invoqué la méthode déléguée

- (void)imagePickerController:(UIImagePickerController *)picker 
didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    if ([picker isEqual:self.QRPicker]) 
     //code for QRPicker delegate 
    else 
     //code for cameraPicker delegate 
Questions connexes