Le passage d'arguments dans un sélecteur de l'IPhone

J'ai un barButtonItem qui appelle une action qui échange deux points de vue dans un bloc d'animation. J'ai désactiver le barButtonItem au début de la méthode d'action, qu'il appelle, et je veux l'activer lorsque c'est terminé, de sorte que l'utilisateur ne peut pas retourner le voir à nouveau avant d'avoir fini de le feuilleter.

Il le fait dans une UIView bloc d'animation, donc Si je l'activer à la ned, de la méthode, il sera immédiate et qui détruit le but car il est activé avant que l'animation se termine.

Dans la méthode, je l'ai jeté de l'expéditeur à un UIBarButtonItem, et je les désactiver. J'ai donc trouvé [UIView setAnimationDidStopSelector:@selector()], mais j'ai besoin de passer mon barButtonItem dans le sélecteur de sorte que le enableControl Méthode vous permettra de ça (ce serait beaucoup plus facile si je pouvais en faire une fonction anonyme..).

Alors, comment puis-je passer le barButton comme argument? Je préfère ne pas avoir à faire un ivar juste pour ça.. Voici le code:

- (void)barBtnItemSwitchViews_Clicked:(id)sender {
    UIBarButtonItem *barButton = (UIBarButtonItem *)sender;
    barButton.enabled = NO;
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.8];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    if(!self.yellowVC.view.superview) {
        [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:innerView cache:YES];
        [yellowVC viewWillAppear:YES];
        [blueVC viewWillDisappear:YES];
        [blueVC.view removeFromSuperview];
        self.blueVC = nil;
        [innerView addSubview:yellowVC.view];
    } else if(!self.blueVC.view.superview) {
        [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:innerView cache:YES];
        [blueVC viewWillAppear:YES];
        [yellowVC viewWillDisappear:YES];
        [yellowVC.view removeFromSuperview];
        self.yellowVC = nil;
        [innerView addSubview:blueVC.view];
    }
    [UIView commitAnimations];
    [UIView setAnimationDidStopSelector:@selector(enableControl:)]; //How do I pass barButton??
}

- (void)enableControl:(UIControl *)control {
    control.enabled = YES;
}

Voici ce que j'ai changé, mais la méthode n'est pas appelé.. Ce que je fais mal?

- (void)barBtnItemSwitchViews_Clicked:(id)sender {
    UIBarButtonItem *barButton = (UIBarButtonItem *)sender;
    barButton.enabled = NO;
    [UIView beginAnimations:nil context:barButton];
    [UIView setAnimationDuration:0.8];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    if(!self.yellowVC.view.superview) {
        [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:innerView cache:YES];
        [yellowVC viewWillAppear:YES];
        [blueVC viewWillDisappear:YES];
        [blueVC.view removeFromSuperview];
        self.blueVC = nil;
        [innerView addSubview:yellowVC.view];
    } else if(!self.blueVC.view.superview) {
        [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:innerView cache:YES];
        [blueVC viewWillAppear:YES];
        [yellowVC viewWillDisappear:YES];
        [yellowVC.view removeFromSuperview];
        self.yellowVC = nil;
        [innerView addSubview:blueVC.view];
    }
    [UIView setAnimationDidStopSelector:@selector(flipViewAnimationDidStop:finished:context:)];
    [UIView commitAnimations];
}

- (void)flipViewAnimationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
    UIBarButtonItem *barButton = (UIBarButtonItem *)context;
    barButton.enabled = NO;
    NSLog(@"Disabled");
}

EDIT: j'ai tout compris. J'ai dû faire le bouton, le contexte, et puis ne setAnimationDelegate:self, puis setAnimationDidEndSelector:@selector(myMethod:finished:context:), et ensuite, dans la méthode de fonte contexte de uibarbuttonitem et de le ré-activer.

  • Lorsque vous modifiez, ne retirez pas la question d'origine...
  • J'ai mis ma question d'origine de retour.
InformationsquelleAutor mk12 | 2009-08-03