突出显示iOS 7时,为UIButton设置标题颜色

Ada*_*ner 31 iphone objective-c uibutton ios ios7

我在viewController中有以下代码,所有的出口和动作都正确连接.的WHITEPURPLE是我为定义的常量UIColors.我还设置UIWindowtintColorPURPLE,并且向下传播到按钮.

- (void)viewDidLoad {
    [super viewDidLoad];
    [button setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted];
    button.backgroundColor = WHITE;
    button.layer.borderWidth = 1.0;
    button.layer.masksToBounds = YES;
    button.layer.cornerRadius = 5.0;
    button.layer.borderColor = PURPLE.CGColor;
}

-(IBAction) buttonTouchDown:(id)sender {
    button.backgroundColor = PURPLE;
    button.layer.borderColor = WHITE.CGColor;
}

-(IBAction) buttonTouchUpOutside:(id)sender {
    button.backgroundColor = WHITE;
    button.layer.borderColor = PURPLE.CGColor;
}

-(IBAction) buttonTouchUpInside:(id)sender {
    button.backgroundColor = WHITE;
    button.layer.borderColor = PURPLE.CGColor;
}
Run Code Online (Sandbox Code Playgroud)

当我点击按钮时,文字不像我告诉它的那样变白 viewDidLoad

这里有一些截图,我可以更好地裁剪!正如您在突出显示的状态中所看到的那样,它不是白色,而是像白色和紫色混合.我需要使用UIButtonTypeCustom吗?我听说如果我这样做,我将无法获得iOS 7的优势tintColor.不确定这是怎样的正确方法.提前致谢.

normalState highlightedState

Dav*_*ong 61

你不应该使用UIControlStateSelected吗?

好吧,我只是自己试了一下它不想工作得很好.

您需要将按钮样式设置为自定义.UIButton系统风格做了许多你无法改变的事情.突出显示的按钮状态默认为它自己的实现,如果你的tintcolor,它是一个更轻的版本.

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setTitleColor:self.view.tintColor forState:UIControlStateNormal];
[button setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected];
Run Code Online (Sandbox Code Playgroud)

这应该会得到白色文本背景.

  • @greenisus请注意,UIButton,UISegmentedControl和其他UIKit类继承了已选择状态的UIControl.Interface Builder和代码都支持使用UIControlStateSelected UIControlStateDisabled等进行的可视化更改.有关UIControl的selected属性的好处是从按钮调用isSelected并允许按钮处理boolean属性. (5认同)
  • 设置按钮样式为Custom为我工作!谢谢! (3认同)