【问题标题】:How to add two UIButton actions for a single UIButton如何为单个 UIButton 添加两个 UIButton 操作
【发布时间】:2015-02-11 23:08:22
【问题描述】:

大家好,我正在尝试为单个 UIButton 添加两个不同的操作。在我看来,像“编辑”和“新建”这样的两个 UIButton 有不同的操作和一个表格视图。当我单击编辑按钮时,它显示表格视图的编辑选项,并且“新建”按钮标题标签更改为“清除”,“编辑”更改为“完成”,当我单击“清除”文本时,它将显示警报,单击取消按钮它会进入正常的先前状态。到目前为止,一切正常。如果我们单击“新建”,它应该导航到下一个视图,但我得到的是它显示的编辑选项并导航到下一个视图。

//编辑表格方法

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

}

//按钮动作和方法

    - (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;


}

这个动作方法我试过了。提前谢谢

【问题讨论】:

  • 用 ([editButton.titleLabel.text isEqualToString:@"Edit"]) 代替 [sender tag] 显示警报并导航到下一个屏幕

标签: ios objective-c iphone uibutton ibaction


【解决方案1】:

请尝试关注Code,在viewDidLoad 中关注Code

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

现在您必须将Method 与您的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");
        }
    }
}

【讨论】:

    【解决方案2】:

    在标签值的基础上,你可以像下面这样添加:-

    (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
    {
    
    }
    

    【讨论】:

    • 如何为一个按钮添加两个标签?有可能吗??
    • 是的,您可以根据自己的情况设置两个标签。
    【解决方案3】:

    据我了解,

    首先将 addTarget as 'newbtnaction' 设置为按钮“New”,然后在该方法中将按钮标题更改为“clear”,并将 addtarget 设置为 'clearaction' 方法名称。

    与第二个按钮相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多