svs
svs

Reputation: 257

How to add two UIButton actions for a single UIButton

Hello every one i'm trying to add two different actions for a single UIButton. In my view there are two UIButtons like "Edit" and "New" has different actions and a table view. When i click the edit button it shows editing option of the table view and the "New" button title label changes to "clear" and "Edit" to "Done", when i clicked the "Clear" text it will show alert, clicking the cancel button it goes to normal previous state. Up to this all are working fine. If we click "New" it should navigate to next view, but what i'm getting is its displaying editing options and also navigating to next view.

//Editing table method

- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
    [super setEditing:editing animated:animated];
    [messagesTableView setEditing:editing animated:YES];

}

//button actions and methods

    - (IBAction)editButtonAction:(id)sender
{
    if ([editButton.titleLabel.text isEqualToString:@"Edit"])
    {

        [self setEditing:YES];
        //
        [editButton setTitle:@"Done" forState:UIControlStateNormal];
        [editButton setTitle:@"Done" forState:UIControlStateSelected];

        [createNewMessageBtn setTitle:@"Clear" forState:UIControlStateNormal];
        [createNewMessageBtn setTitle:@"clear" forState:UIControlStateSelected];
        createNewMessageBtn.tag = 2;
        createNewMessageBtn.enabled = YES;
        createNewMessageBtn.userInteractionEnabled = YES;

        //        [self.voicemailTable reloadData];

    }
    else if ([editButton.titleLabel.text isEqualToString:@"Done"])
    {
        [self setEditing:NO];

        //
        [editButton setTitle:@"Edit" forState:UIControlStateNormal];
        [editButton setTitle:@"Edit" forState:UIControlStateSelected];

        [createNewMessageBtn setTitle:@"New" forState:UIControlStateNormal];
        [createNewMessageBtn setTitle:@"New" forState:UIControlStateSelected];
        createNewMessageBtn.tag = 1;
        createNewMessageBtn.enabled = YES;
        createNewMessageBtn.userInteractionEnabled = YES;
        //        [self.voicemailTable reloadData];

    }

    //
    [self.messagesTableView reloadData];


}

- (IBAction)newConverstionBtnActn:(id)sender
{
    if ([sender tag] == 1)
    {
        [self setEditing:NO];

        NSLog(@"tag---%ld",(long)[sender tag]);
        [self.editButton setTitle:@"Edit" forState:UIControlStateNormal];
        [self.editButton setTitle:@"Edit" forState:UIControlStateSelected];

        [self.createNewMessageBtn setTitle:@"New" forState:UIControlStateNormal];
        [self.createNewMessageBtn setTitle:@"New" forState:UIControlStateSelected];
        createNewMessageBtn.enabled = YES;
        createNewMessageBtn.userInteractionEnabled = YES;
        [self performSegueWithIdentifier:@"newMessage" sender:self];


    }

    else if ([sender tag] == 2)
    {
        NSLog(@"tag---%ld",(long)[sender tag]);

        [self.createNewMessageBtn setTitle:@"New" forState:UIControlStateNormal];
        [self.createNewMessageBtn setTitle:@"New" forState:UIControlStateSelected];
        createNewMessageBtn.enabled = YES;
        createNewMessageBtn.userInteractionEnabled = YES;

        transparentView  = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 300, 540)];
        transparentView.backgroundColor = [UIColor clearColor];

        [self.view addSubview: transparentView];

        //
        clearAllOption = [[UIButton alloc]initWithFrame: CGRectMake(5, 430, 310, 39)];
        clearAllOption.layer.borderColor = [[SupportFeatures getColorFromHexStr:@"FD8646"] CGColor];
        clearAllOption.layer.borderWidth = 2;
        clearAllOption.layer.cornerRadius = 6;
        [clearAllOption setTitle:@"Clear All Messages" forState:UIControlStateNormal];
        [createNewMessageBtn setTitleColor:[SupportFeatures getColorFromHexStr:@"555562"] forState:UIControlStateNormal];
            self.clearAllOption.titleLabel.font = [UIFont fontWithName:@"Lato-Regular" size:15];


        [clearAllOption setBackgroundColor:[SupportFeatures getColorFromHexStr:@"FD8646"]];
        [clearAllOption addTarget:self action:@selector(clearAllContactsAction) forControlEvents:UIControlEventTouchUpInside];
        //[self.view addSubview: clearAllOption];
        [self.transparentView addSubview: clearAllOption];


        //
        cancelOption = [[UIButton alloc]initWithFrame: CGRectMake(5, 480, 310, 39)];
        cancelOption.layer.borderColor = [[SupportFeatures getColorFromHexStr:@"4BBAC7"] CGColor];
        cancelOption.layer.borderWidth = 2;
        cancelOption.layer.cornerRadius = 6;
        [cancelOption setTitle:@"Cancel" forState:UIControlStateNormal];
        cancelOption.titleLabel.font = [UIFont fontWithName:@"Lato-Regular" size:15];
        [cancelOption setTitleColor:[SupportFeatures getColorFromHexStr:@"555562"] forState:UIControlStateNormal];

        [cancelOption setBackgroundColor:[SupportFeatures getColorFromHexStr:@"4BBAC7"]];
        [cancelOption addTarget:self action:@selector(cancelContactsAction) forControlEvents:UIControlEventTouchUpInside];

        //[self.view addSubview: cancelOption];
        [self.transparentView addSubview: cancelOption];

        //
        self.editButton.userInteractionEnabled = NO;
//        self.createNewMessageBtn.userInteractionEnabled = YES;

    }
}


- (void)clearAllContactsAction
{
    //
    [self.transparentView removeFromSuperview];

    //
    self.messagesTableView.hidden = YES;

    [self.createNewMessageBtn setTitle:@"New" forState:UIControlStateNormal];
    [self.createNewMessageBtn setTitle:@"New" forState:UIControlStateSelected];
//    createNewMessageBtn.enabled = YES;


    [self.createNewMessageBtn setTitleColor:[SupportFeatures getColorFromHexStr:@"555562"] forState:UIControlStateNormal];
    [self.createNewMessageBtn setTitleColor:[SupportFeatures getColorFromHexStr:@"555562"] forState:UIControlStateSelected];
    [self.createNewMessageBtn setUserInteractionEnabled: YES];

    //
    [clearAllOption removeFromSuperview];
    [cancelOption removeFromSuperview];
    //
    noRecentsOption = [[UILabel alloc]initWithFrame:CGRectMake(100, 100, 150, 30)];
    noRecentsOption.text = @"No Recents";
    [self.view addSubview: noRecentsOption];

    //
    self.editButton.userInteractionEnabled = NO;
    self.createNewMessageBtn.userInteractionEnabled = YES;

}

- (void)cancelContactsAction
{
    [self setEditing:NO];

    [createNewMessageBtn setTitle:@"New" forState:UIControlStateNormal];
    [createNewMessageBtn setTitle:@"New" forState:UIControlStateSelected];
    createNewMessageBtn.tag = 1;
    createNewMessageBtn.enabled = YES;
    createNewMessageBtn.userInteractionEnabled = YES;
    //
    [self.transparentView removeFromSuperview];

    [clearAllOption removeFromSuperview];

    [cancelOption removeFromSuperview];
    //
    [self.editButton setTitle:@"Edit" forState:UIControlStateNormal];
    [self.editButton setTitle:@"Edit" forState:UIControlStateSelected];
    editButton.enabled = YES;
    editButton.userInteractionEnabled = YES;


}

This action methods i've tried.Thanks in advance

Upvotes: 0

Views: 648

Answers (3)

Abhishek Sharma
Abhishek Sharma

Reputation: 3283

Please try with following Code, In viewDidLoad put following Code

 [self.btnEdit setTitle:@"Edit" forState:UIControlStateNormal];
 [self.btnNew setTitle:@"New" forState:UIControlStateNormal];

Now you have to connect following Method with your Relevant UIButtons

- (IBAction)btnEdit_Done_Click:(id)sender {

    if([[self.btnEdit titleForState:UIControlStateNormal] isEqualToString:@"Edit"]){
        NSLog(@"Put code for allow editing for TableView");
        [self.btnNew setTitle:@"Clear" forState:UIControlStateNormal];
        [self.btnEdit setTitle:@"Done" forState:UIControlStateNormal];
    }else{
        [self.btnEdit setTitle:@"Edit" forState:UIControlStateNormal];
        [self.btnNew setTitle:@"New" forState:UIControlStateNormal];
    }

}

- (IBAction)btnNew_Clear_Click:(id)sender {

    if([[self.btnNew titleForState:UIControlStateNormal]isEqualToString:@"New"]){
        NSLog(@"Push to New Controller");
    }else{
        UIAlertView * alert = [[UIAlertView alloc]initWithTitle:@"Title" message:@"Message" delegate:self cancelButtonTitle:nil otherButtonTitles:@"Ok",@"Cancel", nil];
        [alert setTag:101];
        [alert show];
    }
}

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {

    if([alertView tag] == 101){

        [self.btnEdit setTitle:@"Edit" forState:UIControlStateNormal];
        [self.btnNew setTitle:@"New" forState:UIControlStateNormal];
        if(buttonIndex == 1){
            NSLog(@"clear All Thing");
        }else{
            NSLog(@"No Action");
        }
    }
}

Upvotes: 1

RJV Kumar
RJV Kumar

Reputation: 2408

As far as my understanding,

first set addTarget as 'newbtnaction' to the button "New" and inside that method change the button title as "clear" and addtarget as 'clearaction' method name.

same way to the second button.

Upvotes: 0

Hussain Shabbir
Hussain Shabbir

Reputation: 15035

On the basis of tag value you can add like that below:-

(editButton.tag==1) ? [editButton addTarget:self action:@selector(doEditAction:) 
forControlEvents:UIControlEventTouchUpInside]:[editButton addTarget:self action:@selector(doneAction:) forControlEvents:UIControlEventTouchUpInside];

-(void)doEditAction:(id)sender
{

}
-(void)doneAction:(id)sender
{

}

Upvotes: 0

Related Questions