Search code examples
iphoneobjective-ciosibaction

UIButton actions


I have a UIButton set up in a storyboard that when pressed animates a UIVIew. I would like the same button to animate/move the UIView back to it's original point when it is pressed a second time.

What is the best way to do this?

thanks for any help or pointers.

this is the code I'm using to animate and move the UIVIew:

I'm using a BOOL named buttonCurrentStatus.

-(IBAction)sortDeals:(UIButton*)sender {

if (buttonCurrentStatus == NO)
{
    buttonCurrentStatus = YES;

CGRect menuTopFrame = self.menuTop.frame;
menuTopFrame.origin.y = 30;


[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationDelay:0.0];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

self.menuTop.frame = menuTopFrame;

[UIView commitAnimations];
    NSLog(@"Sort Deals touched button status = yes");


} else {
        buttonCurrentStatus = NO;

        CGRect menuTopFrame = self.menuTop.frame;
        menuTopFrame.origin.y = 30;


        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:0.5];
        [UIView setAnimationDelay:0.0];
        [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

        self.menuTop.frame = menuTopFrame;

        [UIView commitAnimations];


NSLog(@"Sort Deals touched button status = no");

    }

Solution

  • Another more general way is to use an IBAction that will execute one of two methods. Like previous answers, you can use a BOOl value, or int in order to determine what action to use. This is a more general answer, and can be used for many purposes.

    First, you will need a BOOL variable. For this example I put the Bool variable as boolVarible (Yes, I know I spelled it wrong). By default I have it set to YES.

    bool boolVarible = YES;
    

    I made that a class variable.

    -(IBAction)buttonAction:(id)sender {
        if (boolVarible == YES)
        {
            //Execute first action
            [self firstAction];
        }
        else
        {
            //Execute second action
            [self secondAction];
        }
    }
    
    -(void)firstAction {
        //Do something here...
    }
    
    -(void)secondAction {
        //Do something here...
    }
    

    Hopefully, you get the idea. You can then swap actions whenever you want. Just simply change the BOOl value, and then when the button is pressed, it will execute another method. I find this cleaner than doing it all in one action. Good luck.