繁体   English   中英

在iOs7中以编程方式设置按钮边框的颜色

[英]Programmaticaly setting color of a buttons border in iOs7

我正在使用此代码为UIButtons设置边框(在iOs 7中)。 它工作得很好,但仅适用于一个按钮状态。

- (void)setRoundedBorder:(float) radius borderWidth:(float)borderWidth color:(UIColor*)color
{
    CALayer * l = [self layer];
    [l setMasksToBounds:YES];
    [l setCornerRadius:radius];
    // You can even add a border
    [l setBorderWidth:borderWidth];
    [l setBorderColor:[color CGColor]];
}

如何调整它,以便可以在处于选定/突出显示状态的按钮上设置颜色。 PS:编辑添加:上面的代码在UIButton的类别内。

我尝试了这个:

    CALayer * l = [self layer];
    [l setMasksToBounds:YES];
    [l setCornerRadius:radius];
    // You can even add a border
    [l setBorderWidth:borderWidth];
    if (self.state == UIControlStateHighlighted) {
        [l setBorderColor:[anotherColor] CGColor]
    } else {
    [l setBorderColor:[color CGColor]];
}

这不起作用,因为它在类别内,并且显然无法检测到状态更改...

- (void)setRoundedBorder:(float) radius borderWidth:(float)borderWidth color:(UIColor*)color state:(UIControlState*)buttonState
{

    CALayer * l = [self layer];
    [l setMasksToBounds:YES];
    [l setCornerRadius:radius];
    // You can even add a border
    [l setBorderWidth:borderWidth];
    [l setBorderColor:[color CGColor]];

    if(buttonState == UIControlStateHighlighted)
       [l setBorderColor:[YOURCOLOR CGColor]];

}

要么

如果这是您的UIButton声明,则添加选择器,如下所示:

[yourButton addTarget:self action:@selector(highlightButtonBorder:) forControlEvents:UIControlEventTouchDown];
[yourButton addTarget:self action:@selector(unhighlightButtonBorder:) forControlEvents:UIControlEventTouchUpInside];
//Add extra selectors for other states if required as shown above 


- (void)highlightButtonBorder:(UIButton*)sender
{
    //your extra code goes here
    yourButton.layer.borderColor = [[UIColor YOURCOLOR]CGColor];
}

- (void)unhighlightButtonBorder:(UIButton*)sender
{
   //your extra code goes here
   myButton.layer.borderColor = [[UIColor YOURCOLOR]CGColor];
}

希望这对您有所帮助。

您可以将按钮本身添加为UIControlEvents目标。 这应该在您的类别内起作用,只需对按钮调用一次setupButton

- (void)setupButton{
    self.layer.borderWidth = borderWidth;
    [self makeNormalState:self];

    [self addTarget:self action:@selector(makeHighlightedState:) forControlEvents:UIControlEventTouchDown];
    [self addTarget:self action:@selector(makeNormalState:) forControlEvents:UIControlEventTouchUpInside];
    [self addTarget:self action:@selector(makeNormalState:) forControlEvents:UIControlEventTouchUpOutside];
}

- (void)makeNormalState:(UIButton*)sender{
    sender.layer.borderColor = normalStateColor.CGColor;
}

- (void) makeHighlightedState:(UIButton*)sender{
    sender.layer.borderColor = highlightedStateColor.CGColor;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM