在iOS中,我如何在不按下按钮的情况下改变UIButton的标题/颜色?



下面的代码做了我想要的一切(将editButton的标题和颜色从正常颜色"编辑"更改为红色"取消",并在按下时返回,除了,当editButton显示红色"取消"并且我按下sendButton时,我希望editButton再次显示正常颜色"编辑"。

是我做错了什么,还是我需要做别的什么?

谢谢,约翰

- (IBAction)sendClicked:(id)sender {
    if (dontCheck) {
        dontCheck = NO;
        [editButton setTitle:@"Edit" forState:UIControlStateNormal];
        [editButton setTitleColor:[[sendButton titleLabel] textColor] forState:UIControlStateNormal];  
    }
// ...     
}
- (IBAction)editClicked:(id)sender {
    if (dontCheck)  {
        dontCheck = NO;        
        dataLoaded = NO;
        [sender setTitle:@"Edit" forState:UIControlStateNormal];
        [sender setTitleColor:[[submitButton titleLabel] textColor] forState:UIControlStateNormal];
    } else {
        dontCheck = YES;        
        [sender setTitle:@"Cancel" forState:UIControlStateNormal];
        [sender setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
    }
// ...
} 

这对我不起作用:(我确实在xib文件中做了必要的更改)

 - (IBAction)sendClicked:(id)sender { 
    if (dontCheck) {
        dontCheck = NO;
        [editButton setTitle:@"Edit" forState:UIControlStateNormal];
        [editButton setTitleColor:[[submitButton titleLabel] textColor] forState:UIControlStateNormal];
        [editButton setSelected:NO];
    }
  // ... 
}
 - (IBAction)editClicked:(id)sender { 
    if (dontCheck) { 
        dontCheck = NO; 
        dataLoaded = NO;
        [sender setTitle:@"Edit" forState:UIControlStateNormal];
        [sender setTitleColor:[[submitButton titleLabel] textColor] forState:UIControlStateNormal];
        [editButton setSelected:NO`];
    } else {
        dontCheck = YES;
        [sender setTitle:@"Cancel" forState:UIControlStateSelected];
        [sender setTitleColor:[UIColor redColor] forState:UIControlStateSelected];
        [editButton setSelected:YES];
    }
    // ...
}

您可以为不同的状态设置不同的颜色,例如突出显示,选中,禁用。这样,您就不需要更改按钮目标操作中的颜色。它还允许您简单地调用这些方法中的任何一个来更改按钮的状态和外观:

[editButton setDisabled:YES];

[editButton setSelected:YES];

设置不同状态的颜色:

[editButton setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[editButton setTitleColor:[UIColor purpleColor] forState:UIControlStateHighlighted];
[editButton setTitleColor:[UIColor greenColor] forState:UIControlStateSelected];
[editButton setTitleColor:[UIColor grayColor] forState:UIControlStateDisabled];

下面的添加完成了我想要的(在Swift中是最新的):

@IBAction func editAction(_ sender: UIButton) 
{
        if (dontCheck) { 
            dontCheck = false 
            dataLoaded = false
            editButton.setTitle("Edit", for: [])
            editButton.setTitleColor(clearAllButton.tintColor, for: [])
            self.editButton.layer.borderColor =  clearAllButton.tintColor.cgColor
        }
        else
        {
            dontCheck = true        
            editButton.setTitle("Cancel", for: [])
            editButton.setTitleColor(UIColor.red, for: [])
            self.editButton.layer.borderColor =  UIColor.red.cgColor
        }
// ...
} 

添加self.XXXButton.layer.borderColor等于另一个不变的按钮的tintColor就可以了

相关内容

最新更新