2010-11-24 3 views
0

J'ai le code suivant fonctionne parfaitement, sauf ... bien pour le rappel!Comment mettre en œuvre un rappel de téléphone à javascript

- (void)readBarcode:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options 
{ 
    ZBarReaderViewController *reader = [ZBarReaderViewController new]; 
    reader.readerDelegate = self; 

    ZBarImageScanner *scanner = reader.scanner; 
    [scanner setSymbology: ZBAR_EAN13 
        config: ZBAR_CFG_ENABLE 
         to: 1]; 

    [[super appViewController] presentModalViewController:reader animated:YES]; 
    [reader release]; 
} 

(void) imagePickerController:(UIImagePickerController*)reader didFinishPickingMediaWithInfo: (NSDictionary*) info 
{ 
    id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults]; 

    ZBarSymbol *symbol = nil; 
    for(symbol in results) 
     break; 

    resultText.text = symbol.data; 
    resultImage.image = [info objectForKey: UIImagePickerControllerOriginalImage]; 

    NSString* retStr = [[NSString alloc] 
         initWithFormat:@"%@({ code: '%@', image: '%@' });", 
         resultText.text,resultImage.image]; 

    [ webView stringByEvaluatingJavaScriptFromString:retStr ]; 

    [reader dismissModalViewControllerAnimated: YES]; 
} 

J'appelle alors la fonction de javascript:

 function getIt(){ 
      PhoneGap.exec("BarcodeReader.readBarcode", "myCallback"); 
     } 

problème est que je ne comprends pas comment appeler la fonction « MyCallBack » de C# (admettre que je suis un débutant total)

+0

vous n'a pas accepté la réponse précédente qui Je crois est la même chose que cela? http://stackoverflow.com/questions/4188581/how-to-implement-a-callback-with-phonegap –

+0

convenu, mais la question n'était pas complète. – Disco

Répondre

1

Cela devrait fonctionner ...

Ajouter la propriété à tête de fichier (How To Add A Property In Objective C)

-(NSString *) jsCallback; 

Obtenez la méthode de rappel javascript et définissez la propriété

- (void)readBarcode:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options 
{ 
    ZBarReaderViewController *reader = [ZBarReaderViewController new]; 
    reader.readerDelegate = self; 

    // New Property added !!!! 
    NSString * jsCallback = [info objectAtIndex:0]; 

    ZBarImageScanner *scanner = reader.scanner; 
    [scanner setSymbology: ZBAR_EAN13 
        config: ZBAR_CFG_ENABLE 
         to: 1]; 

    [[super appViewController] presentModalViewController:reader animated:YES]; 
    [reader release]; 
} 

Utilisez la méthode de rappel javascript ici

- (void) imagePickerController:(UIImagePickerController*)reader didFinishPickingMediaWithInfo: (NSDictionary*) info 
{ 
    id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults]; 

    ZBarSymbol *symbol = nil; 
    for(symbol in results) 
     break; 

    resultText.text = symbol.data; 
    resultImage.image = [info objectForKey: UIImagePickerControllerOriginalImage]; 

    // create the string 
    NSString* retStr = [[NSString alloc] 
    initWithFormat:@"%@({ code: '%@', image: '%@' });", 
          jsCallback,resultText.text,resultImage.image]; 

    //execute 
    [ webView stringByEvaluatingJavaScriptFromString:retStr ]; 

    [reader dismissModalViewControllerAnimated: YES]; 
} 

S'il vous plaît marquer the other answer I provided you comme correct aussi

+0

Merci aaron pour la réponse; J'avais mis la chaîne de retour dans le 'imagePickerController' c'est pourquoi cela ne fonctionnait pas mais maintenant je reçois le rappel appelé réellement sur l'imagepicker quand il est lancé; Je veux qu'il soit appelé après la capture de l'image. – Disco

+0

donc je veux: 1. Lancer la capture 2. obtenir le rappel. Avec votre exemple, le rappel arrive avant le résultat de la capture. – Disco

+0

remettez le code à la méthode imagePickerController après que le sélecteur a été ignoré –

Questions connexes