Un raccourci vers le code

Bonjour bonjour,


 


Je suis à  la recherche d'un raccourci comme peux l'être le "include"  de php, car je dois utiliser plusieurs fois ce code : 



- (IBAction)btnBndScanner:(id)sender {

// Do any additional setup after loading the view, typically from a nib.
// ADD: present a barcode reader that scans from the camera feed
ZBarReaderViewController * reader = [ZBarReaderViewController new];
reader.readerDelegate=self;
reader.supportedOrientationsMask = ZBarOrientationMaskAll;
ZBarImageScanner *scanner = reader.scanner;
// TODO: (optional) additional reader configuration here

// EXAMPLE: disable rarely used I2/5 to improve performance
[scanner setSymbology: ZBAR_I25
config: ZBAR_CFG_ENABLE
to: 0];
bool isiPhone5 = CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size,CGSizeMake(640, 1136));
UIImageView *bgQRScan;

if(isiPhone5){
bgQRScan=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320,568)];
bgQRScan.image=[UIImage imageNamed:@bgQrScan-568h.png];
}else{
bgQRScan=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
bgQRScan.image=[UIImage imageNamed:@bgQrScan.png];
}

[reader.view addSubview:bgQRScan];

//ajout de la barre de navigation
UIImageView *NavBarQrCode=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 320, 65)];
NavBarQrCode.image=[UIImage imageNamed:@statuBarre.png];
[reader.view addSubview:NavBarQrCode];


// ajout d'un bouton retour

UIButton *barButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 21, 50, 45)];
[barButton setTitle:@"" forState:UIControlStateNormal];
[barButton setImage:[UIImage imageNamed:@backButton.png] forState:UIControlStateNormal];
[barButton addTarget:self action:@selector(retour) forControlEvents:UIControlEventTouchDown];
barButton.enabled=YES;

[reader.view addSubview:barButton];

// ajout du texte :
UILabel *texteQrScan=[[UILabel alloc] initWithFrame:CGRectMake(0, 100, 320, 50)];
texteQrScan.text=@Scanner;
texteQrScan.textColor=[UIColor whiteColor];
texteQrScan.numberOfLines=3;
texteQrScan.textAlignment=NSTextAlignmentCenter;
[reader.view addSubview:texteQrScan];
// present and release the controller
reader.showsZBarControls = NO;

[self presentViewController:reader animated:YES completion:nil];
}

- (IBAction)retour
{
[self dismissViewControllerAnimated:YES completion:nil];
}

- (void) imagePickerController: (UIImagePickerController*) reader
didFinishPickingMediaWithInfo: (NSDictionary*) info
{
// ADD: get the decode results
id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults];
ZBarSymbol *symbol = nil;
for(symbol in results)
// EXAMPLE: just grab the first barcode
break;

// EXAMPLE: do something useful with the barcode data
NSLog(@%@",symbol.data);


UIAlertView *AlertQrCode=[[UIAlertView alloc] initWithTitle:@Bravo message:@Le QrCode a été correctement flashé ! delegate:self cancelButtonTitle:@Ok otherButtonTitles:nil];
[AlertQrCode show];

[self dismissViewControllerAnimated:YES completion:nil];

// ADD: dismiss the controller (NB dismiss from the *reader*!)
//[reader dismissModalViewControllerAnimated: YES];
}


Donc j'utilise ZBar pour lire des QrCodes, et ayant plusieurs fois le bouton permettant d'accéder à  la vue de scan je souhaiterais le noter une seul fois puis l'appeler dans la fonction d'action des bouttons


 


-> J'ai essayé de créer une fonction qui me  return reader;


 


Le problème est au moment de la détection du QrCode celui plante ainsi que pour le bouton retour.


 


Donc si vous avez une fonction qui me permet de créer un fichier ou je coller mon coller et ses fonction puis dans 



- (IBAction)btnBndScanner:(id)sender {
[ appelle mon code]
}

Merci d'avance,


Joey.


Réponses

  • AliGatorAliGator Membre, Modérateur
    Qu'est ce que ce sujet vient faire dans la rubrique "Actualités" ?!?
  • HorusHorus Membre
    décembre 2013 modifié #3

    oups >< une petite erreur pourrais-tu déplacer le sujet Ali stp 


     


    Edit: Merci Ali :)


  • xylowebxyloweb Membre
    janvier 2014 modifié #4

    Désolé pas le temps d'approfondir mais tu as tout intérêt à  utiliser des delegates comme dans le code ci-dessous écrit par ton serviteur et qui bien sur n'est pas parfait...



    //
    // ScanController.h
    // VocaBus
    //
    // Created by Jean-Michel MARINO on 06/11/12.
    //
    //

    #import <Foundation/Foundation.h>

    @class ScanController;

    @protocol ScanControllerDelegate <NSObject>

    - (void)scanController:(ScanController *)scanCtrl didFinishWithStopCode:(NSString *)stopCode;
    - (void)scanController:(ScanController *)scanCtrl didFailedWithError:(NSError *)error;

    @optional
    - (void)scanControllerDidStart:(ScanController *)scanCtrl;
    - (void)scanControllerDidCancel:(ScanController *)scanCtrl;

    @end

    static NSString * const kLastQRCodeScanned = @LastQRCodeScanned;

    @interface ScanController : NSObject <ZBarReaderDelegate>
    {
    UIViewController *viewCtrl;
    id<ScanControllerDelegate> scanDelegate;

    NSString *lastQRCodeScanned;
    }


    @property (nonatomic, assign) UIViewController *viewCtrl;
    @property (nonatomic, assign) id<ScanControllerDelegate> scanDelegate;

    @property (nonatomic, retain) NSString *lastQRCodeScanned;

    - (id)initWithViewController:(UIViewController *)viewController;
    - (void)start;

    @end



    //
    // ScanController.m
    // VocaBus
    //
    // Created by Jean-Michel MARINO on 06/11/12.
    //
    //

    #import "AppDelegate.h"
    #import "AppDebug.h"

    #import "ScanController.h"

    @interface ScanController(private)
    - (NSString *) extractStopCode:(NSString *)scan;
    @end

    @implementation ScanController(private)
    - (NSString *) extractStopCode:(NSString *)scan
    {
    debugForComponent(kDebugMaskQRCodeScanner, @ScanController extractStopCode to: %@", scan);

    self.lastQRCodeScanned = scan;

    NSURL *qrcodeURL = [NSURL URLWithString:scan];
    if (nil == qrcodeURL) { goto DONE; }

    NSString *query = [qrcodeURL query];
    if (nil == query) { goto DONE; }

    // contrôle du QRCode : forme stopcode=STGA_2
    NSArray *tmpArray = [query componentsSeparatedByString:@=];
    if (tmpArray && (2 == [tmpArray count])) {

    NSString *arg = [tmpArray objectAtIndex:0];
    if (arg) {
    if ( NSOrderedSame == [arg caseInsensitiveCompare:@stopcode] ) {
    return [tmpArray objectAtIndex:1];
    }
    }
    }

    DONE:
    return nil;
    }

    @end

    @implementation ScanController

    @synthesize viewCtrl = _viewCtrl;
    @synthesize scanDelegate = _scanDelegate;
    @synthesize lastQRCodeScanned;

    - (id) init
    {
    return [self initWithViewController:nil];
    }

    - (id)initWithViewController:(UIViewController *)viewController
    {
    if ((self = [super init])) {
    _viewCtrl = viewController;
    }
    return self;
    }

    - (void)start
    {
    debugForComponent(kDebugMaskQRCodeScanner, @ScanController started);

    // ADD: present a barcode reader that scans from the camera feed
    ZBarReaderViewController *reader = [ZBarReaderViewController new];
    reader.readerDelegate = self;
    // reader.supportedOrientationsMask = ZBarOrientationMaskAll;
    reader.supportedOrientationsMask = ZBarOrientationMask(UIInterfaceOrientationPortrait);


    ZBarImageScanner *scanner = reader.scanner;
    // TODO: (optional) additional reader configuration here

    // EXAMPLE: disable rarely used I2/5 to improve performance
    /*
    [scanner setSymbology: ZBAR_I25
    config: ZBAR_CFG_ENABLE
    to: 0];
    */
    [scanner setSymbology: 0
    config: ZBAR_CFG_ENABLE
    to: 0];
    [scanner setSymbology: ZBAR_QRCODE
    config: ZBAR_CFG_ENABLE
    to: 1];

    // present and release the controller
    //[_viewCtrl presentModalViewController: reader animated: YES];
    [_viewCtrl presentViewController:reader animated:YES completion:^{
    NSLog(@%@", @ScanController started);
    if ([self.scanDelegate respondsToSelector:@selector(scanControllerDidStart:)]) {
    [self.scanDelegate scanControllerDidStart:self];
    }

    }];

    [reader release];
    }


    - (void)handleFinishPickingMedia:(NSString *)result
    {
    if (nil == result) {
    if ([self.scanDelegate respondsToSelector:@selector(scanController:didFailedWithError:)]) {
    NSError *error = [NSError errorWithDomain:kQRCodeScanErrorDomain
    code:-1
    userInfo:[NSDictionary dictionaryWithObject:self.lastQRCodeScanned
    forKey:kLastQRCodeScanned]];
    [self.scanDelegate scanController:self didFailedWithError:error];
    }

    }
    else {
    if ([self.scanDelegate respondsToSelector:@selector(scanController:didFinishWithStopCode:)]) {
    [self.scanDelegate scanController:self didFinishWithStopCode:result];
    }
    }
    }

    #pragma mark - UIImagePickerControllerDelegate / ZBarReaderDelegate methods

    - (void) imagePickerController: (UIImagePickerController*) reader
    didFinishPickingMediaWithInfo: (NSDictionary*) info
    {
    // ADD: dismiss the controller (NB dismiss from the *reader*!)
    //[reader dismissModalViewControllerAnimated: YES];
    [reader dismissViewControllerAnimated:YES completion:^{
    debugForComponent(kDebugMaskQRCodeScanner, @imagePickerController:didFinishPickingMediaWithInfo: %@", [info description]);
    }];

    // ADD: get the decode results
    id<NSFastEnumeration> results =
    [info objectForKey: ZBarReaderControllerResults];
    ZBarSymbol *symbol = nil;
    for(symbol in results)
    // EXAMPLE: just grab the first barcode
    break;

    // EXAMPLE: do something useful with the barcode image
    //uiQRCodeResultImage.image = [info objectForKey: UIImagePickerControllerOriginalImage];

    NSString *scanResult = [self extractStopCode:symbol.data];
    [self performSelector:@selector(handleFinishPickingMedia:) withObject:scanResult afterDelay:0.1];
    }


    - (void)handleCancelPickingMedia
    {
    if ([self.scanDelegate respondsToSelector:@selector(scanControllerDidCancel:)]) {
    [self.scanDelegate scanControllerDidCancel:self];
    }
    }
    - (void)imagePickerControllerDidCancel:(UIImagePickerController *) reader
    {
    [reader dismissViewControllerAnimated:YES completion:^{
    debugForComponent(kDebugMaskQRCodeScanner, @imagePickerControllerDidCancel:);
    }];

    [self performSelector:@selector(handleCancelPickingMedia)];
    }

    #pragma mark - Memory management

    - (void) dealloc
    {
    // delegate
    self.scanDelegate = nil;
    self.lastQRCodeScanned = nil;

    [super dealloc];
    }
    @end


    Ensuite pour appeler cette classe ...


     


    - (void)scanQRCode


    {


      // demande de scan QRCode


      self.scanController.scanDelegate = self;


      [self.scanController start];


    }


     


     


    ... qui acceptera la délégation


     


    #pragma mark - ScanControllerDelegate


     


    - (void)scanControllerDidStart:(ScanController *)scanCtrl


    {


      self.isGeoloc = NO;


      [self handleRequestStartedForBusStop:nil];


    }


     


    - (void)scanController:(ScanController *)scanCtrl didFinishWithStopCode:(NSString *)stopCode


    {


      self.needUpdateRecentsStops = YES;


      [StopRealtime hoursByStop:stopCode withBlock:self.requestHandleBlock];


    }


     


    - (void)scanController:(ScanController *)scanCtrl didFailedWithError:(NSError *)error


    {


      DDLogError(@scanController:didFailedWithError:);


      [self handleScanFailedWithError:error];


    }


     


    - (void)scanControllerDidCancel:(ScanController *)scanCtrl


    {


      self.infosLabel.text = @"";


    }


     

     

    j'avais prévenu, pas le temps à  toi de faire ton marché.

    bon code

Connectez-vous ou Inscrivez-vous pour répondre.